Spring配置文件优先级

SpringBoot配置文件优先级

3.2.2官方文档:Spring Boot 允许您外部化您的配置,以便您可以在不同的环境中使用相同的应用程序代码。您可以使用各种外部配置源,包括 Java 属性文件、YAML 文件、环境变量和命令行参数。

Spring Boot 使用一种非常特殊的 PropertySource顺序,旨在允许合理地覆盖值。后面的属性源可以覆盖前面定义的值。按以下顺序考虑来源:

  1. 默认属性(由设置指定 SpringApplication.setDefaultProperties)。
  2. @PropertySource类上的注释 @ConfigurationEnvironment请注意,在刷新应用程序上下文之前,不会将此类属性源添加到中。现在配置某些属性为时已晚,例如在刷新开始之前读取的 logging.*和。spring.main.*
  3. 配置数据(例如 application.properties文件)。
  4. RandomValuePropertySource仅在 中具有属性 random.*
  5. 操作系统环境变量。
  6. Java 系统属性 ( System.getProperties())。
  7. JNDI 属性来自 java:comp/env.
  8. ServletContext初始化参数。
  9. ServletConfig初始化参数。
  10. 来自 SPRING_APPLICATION_JSON(嵌入环境变量或系统属性中的内联 JSON)的属性。
  11. 命令行参数。
  12. properties您的测试的属性。可用于测试应用程序的特定部分的测试@SpringBootTest注释。
  13. @DynamicPropertySource测试中的注释。
  14. @TestPropertySource对你的测试进行注释。
  15. $HOME/.config/spring-boot当 devtools 处于活动状态时目录中的Devtools全局设置属性

配置数据文件按以下顺序考虑:

  1. 打包在 jar 内的应用程序属性 application.properties(和 YAML 变体)。
  2. 特定于配置文件的应用程序属性打包在 jar(application-{profile}.properties和 YAML 变体)内。
  3. 打包的 jar(和 YAML 变体)之外的应用程序属性 application.properties
  4. 打包的 jar(和 YAML 变体)之外的特定于配置文件的应用程序属性 application-{profile}.properties