SpringBoot 外化配置及加载顺序

Spring Boot 的外化配置加载顺序遵循特定的优先级规则,高优先级的配置会覆盖低优先级的。以下是详细的配置源加载顺序及规则:


一、配置源的优先级(从高到低)

  1. 命令行参数
    通过 --key=value 传递的参数,如 java -jar app.jar --server.port=8081

  2. SPRING_APPLICATION_JSON 属性
    通过环境变量或系统属性传递的 JSON 格式配置,如 SPRING_APPLICATION_JSON='{"server":{"port":8081}}'

  3. Java 系统属性
    使用 -D 参数设置的属性,如 -Dserver.port=8081

  4. 操作系统环境变量
    如 SERVER_PORT=8081

  5. Profile-Specific 配置文件(外部)
    位于项目外部的 application-{profile}.properties 或 YAML 文件(如 ./config/application-dev.yml)。

  6. Profile-Specific 配置文件(内部)
    位于项目内部的 application-{profile}.properties 或 YAML 文件(如 classpath:/application-dev.yml)。

  7. 常规配置文件(外部)
    项目外部的 application.properties 或 YAML 文件(如 ./config/application.yml)。

  8. 常规配置文件(内部)
    项目内部的 application.properties 或 YAML 文件(如 classpath:/application.yml)。

  9. @PropertySource 注解
    通过 @PropertySource 加载的配置文件。

  10. 默认属性
    通过 SpringApplication.setDefaultProperties() 设置的默认属性。


二、配置文件的位置优先级

Spring Boot 会从以下位置按顺序加载配置文件(优先级从高到低):

  1. 当前目录的 /config 子目录
    file:./config/

  2. 当前目录
    file:./

  3. Classpath 的 /config 包
    classpath:/config/

  4. Classpath 根目录
    classpath:/

同一位置的加载顺序

  • 先加载 application.properties,再加载 application.yml

  • 若激活了 Profile(如 dev),则加载 application-{profile}.properties 或 yml,覆盖默认配置。


三、覆盖规则

  1. 高优先级位置 > 低优先级位置
    例如,外部的 file:./config/application.properties 会覆盖内部的 classpath:/application.properties

  2. 同一位置下,Profile-Specific 配置 > 默认配置
    例如,file:./config/application-dev.yml 会覆盖同位置的 file:./config/application.yml

  3. 非配置文件源 > 配置文件源
    如命令行参数、环境变量等优先级高于所有配置文件。


四、示例说明

假设以下配置存在:

  • 命令行参数:--server.port=8081

  • 外部文件 ./config/application.ymlserver.port: 8082

  • 内部文件 classpath:/application-dev.yml(激活 dev Profile):server.port: 8083

最终生效的端口为 8081(命令行参数优先级最高)。


五、高级配置

  • 自定义配置文件路径
    通过 --spring.config.location=classpath:/custom/ 或 spring.config.additional-location 指定额外路径。

  • 多文档 YAML 文件
    在单个 YAML 文件中使用 --- 分隔符定义不同 Profile 的配置(需 Spring Boot 2.4+)。


总结

Spring Boot 的配置加载顺序以“就近覆盖”为原则,同时支持灵活的外部化配置。理解这一机制有助于在不同环境(开发、测试、生产)中高效管理配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值