Spring Boot 设置 application.yaml application.properties 配置文件读取路径
Spring Boot About 2,961 words描述
Spring Boot
可以从jar
包中获取配置文件,也可以从外部获取配置文件。
配置文件覆盖策略
last-wins strategy
最后添加的覆盖先前添加的策略。
配置文件优先级
优先级从高到低
./config/*/
:工程目录下的config
文件夹中的一级子文件夹中的配置文件。./config/
:工程目录下的config
文件夹中的配置文件。./
:工程目录下的配置文件。classpath:/config/
:resources
目录下的config
文件夹下的配置文件(注意:此处不适用一级子文件夹)。classpath:/
:resources
目录下的配置文件。
├── application.yaml
├── config
│ └── application.yaml
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── example
│ └── resources
│ ├── application-prod.yaml
│ ├── application-test.yaml
│ ├── application.yaml
│ └── config
│ └── application.yaml
指定配置文件
使用spring.config.location
指定配置文件的位置。
spring:
config:
location: file:${user.dir}/myconf/
optional:
表示可选的,即没有这个路径也不会报错,而是读取默认路径下的配置。
spring:
config:
location: optional:file:${user.dir}/myconf/
, ; 区别
在使用指定配置文件时使用,
与;
区别如下,如激活的配置是active=prod,live
。
, 逗号
示例
spring:
config:
location: classpath:/cfg/,classpath:/ext/
读取顺序:先读取cfg
文件夹中的配置,再读取ext
文件夹的配置(文件夹读取按字母表顺序)。
这样ext
中的live
配置会覆盖cfg
中的配置。
/cfg/application-live.properties
/ext/application-prod.properties
/ext/application-live.properties
; 封号
示例
spring:
config:
location: classpath:/cfg/;classpath:/ext/
读取顺序:同时读取两个文件夹中的配置,再按激活顺序排序。
/ext/application-prod.properties
/cfg/application-live.properties
/ext/application-live.properties
导入配置
配置了import
配置文件会被导入的配置文件中的属性覆盖。
即:导入的dev.properties
配置会覆盖默认的application.properties
配置。
spring:
config:
import: "optional:file:./dev.properties"
导入无后缀的配置
需使用[.type]
指定文件类型,如[.yaml]
告诉Spring
该myconfig
文件是yaml
格式。
spring:
config:
import: "file:/etc/config/myconfig[.yaml]"
ConfigMap 和 Secret
可以使用configtree
配置Kubernetes
的ConfigMap
和Secret
,但是需要挂载到指定路径,直接使用环境变量引入无效。
spring:
config:
import: "optional:configtree:/etc/config/"
源码
可以看到默认查找路径如下,底下的配置会替换掉上一级的配置。
optional:classpath:/
optional:classpath:/config/
optional:file:./
optional:file:./config/
optional:file:./config/*/
// org.springframework.boot.context.config.ConfigDataEnvironment
class ConfigDataEnvironment {
static final String LOCATION_PROPERTY = "spring.config.location";
static final String ADDITIONAL_LOCATION_PROPERTY = "spring.config.additional-location";
static final String IMPORT_PROPERTY = "spring.config.import";
static final String ON_NOT_FOUND_PROPERTY = "spring.config.on-not-found";
static final ConfigDataLocation[] DEFAULT_SEARCH_LOCATIONS;
static {
List<ConfigDataLocation> locations = new ArrayList<>();
locations.add(ConfigDataLocation.of("optional:classpath:/;optional:classpath:/config/"));
locations.add(ConfigDataLocation.of("optional:file:./;optional:file:./config/;optional:file:./config/*/"));
DEFAULT_SEARCH_LOCATIONS = locations.toArray(new ConfigDataLocation[0]);
}
}
官方文档
Views: 2,535 · Posted: 2023-02-07
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...