Springboot配置优先级

一、项目内部

以下是 SpringBoot 属性源加载顺序。后面的会覆盖前面的值。由低到高,高优先级配置覆盖低优先级

  1. 默认属性(通过SpringApplication.setDefaultProperties指定的)

  2. @PropertySource指定加载的配置(需要写在@Configuration类上才可生效)

  3. 配置文件(application.properties/yml等

  4. RandomValuePropertySource支持的random.*配置(如:@Value("${random.int}"))

  5. OS 环境变量

  6. Java 系统属性(System.getProperties())

  7. JNDI 属性(来自java:comp/env)

  8. ServletContext 初始化参数

  9. ServletConfig 初始化参数

  10. SPRING_APPLICATION_JSON属性(内置在环境变量或系统属性中的 JSON)

  11. 命令行参数

  12. 测试属性。(@SpringBootTest进行测试时指定的属性)

  13. 测试类@TestPropertySource注解

  14. Devtools 设置的全局属性。($HOME/.config/spring-boot)

结论:配置可以写到很多位置,常见的优先级顺序:
命令行> 配置文件> springapplication配置

二、项目外部

最终效果:优先级由高到低,前面覆盖后面

  • 命令行 > 包外config直接子目录 > 包外config目录 > 包外根目录 > 包内目录

  • 同级比较:
    profile配置 > 默认配置
    properties配置 > yaml配置

三、整体配置

规律:最外层的最优先。
● 命令行 > 所有
● 包外 > 包内
● config目录 > 根目录
● profile > application