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: 3,595 · Posted: 2023-02-07
            
            ————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
        Loading...