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]告诉Springmyconfig文件是yaml格式。

spring:
  config:
    import: "file:/etc/config/myconfig[.yaml]"

ConfigMap 和 Secret

可以使用configtree配置KubernetesConfigMapSecret,但是需要挂载到指定路径,直接使用环境变量引入无效。

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]);
    }

}

官方文档

https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config

Views: 2,414 · Posted: 2023-02-07

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

扫描下方二维码关注公众号和小程序↓↓↓

扫描下方二维码关注公众号和小程序↓↓↓


Today On History
Browsing Refresh