14

Spring 对外部化配置的加载有明确的顺序。

  1. 主目录上的 Devtools 全局设置属性(当 devtools 处于活动状态时为 ~/.spring-boot-devtools.properties)。
  2. 测试中的 @TestPropertySource 注释。
  3. 测试中的 @SpringBootTest#properties 注释属性。
  4. 命令行参数。
  5. 来自 SPRING_APPLICATION_JSON 的属性(嵌入在环境变量或系统属性中的内联 JSON)。
  6. ServletConfig 初始化参数。
  7. ServletContext 初始化参数。
  8. 来自 java:comp/env 的 JNDI 属性。
  9. Java 系统属性 (System.getProperties())。
  10. 操作系统环境变量。
  11. 仅具有随机属性的 RandomValuePropertySource。*。
  12. 打包 jar 之外的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。
  13. 打包在 jar 中的特定于配置文件的应用程序属性(application-{profile}.properties 和 YAML 变体)。
  14. 打包 jar 之外的应用程序属性(application.properties 和 YAML 变体)。
  15. 打包在 jar 中的应用程序属性(application.properties 和 YAML 变体)。
  16. @Configuration 类上的 @PropertySource 注释。
  17. 默认属性(通过设置 SpringApplication.setDefaultProperties 指定)。

但是,来自Spring Cloud Config的配置似乎有一个明显的遗漏。有谁知道 Spring Cloud Config 适合上面的位置

4

3 回答 3

4

正如其他人所说,配置服务器是第一位的。如果您尝试使用本地属性(即application-local.yml)覆盖配置服务器的属性,那么您需要向配置服务器添加两个属性**:

spring.cloud.config.allowOverride=true
spring.cloud.config.overrideNone=true

根据文档

通过引导上下文添加到您的应用程序的属性源通常是“远程的”(例如来自配置服务器),默认情况下它们不能在本地覆盖。如果你想允许你的应用程序用他们自己的系统属性或配置文件覆盖远程属性,远程属性源必须通过设置 spring.cloud.config.allowOverride=true 来授予它权限(设置这个不起作用本地)。一旦设置了该标志,就会有一些更细粒度的设置来控制与系统属性和应用程序本地配置相关的远程属性的位置:spring.cloud.config.overrideNone=true 以覆盖任何本地属性源,以及 spring.cloud.config.overrideNone=true 以覆盖任何本地属性源。 cloud.config.overrideSystemProperties=false 如果只有系统属性和环境变量应该覆盖远程设置,

另请参阅this,关于使用spring.cloud.config.override-system-properties=false通过系统/命令行属性覆盖。上面引用的文档有/有不一致之处,我从引用中删除了。

请注意,如果您希望远程配置服务器覆盖本地属性文件源而不是本地系统属性或环境属性,请在配置服务器中添加以下内容:

spring.cloud.config.allowOverride=true
spring.cloud.config.overrideNone=false
spring.cloud.config.overrideSystemProperties=false

** 在这种情况下,该overrideSystemProperties值被忽略。看org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration#insertPropertySources

注意:以上所有内容均适用于 Spring Boot 2.3.x。2.4.x 版使用备用加载优先级。见https://github.com/spring-cloud/spring-cloud-config/issues/1856

于 2020-07-10T16:15:11.623 回答
1

该文件指出:

引导属性在 /env 端点中显示为高优先级属性源,如以下示例所示

所以它将是位置#0

于 2020-02-03T20:44:39.863 回答
0

第 12 和 14 点涵盖 Spring Cloud Config。

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

14. 打包 jar 之外的应用程序属性(application.properties 和 YAML 变体)。

于 2020-06-01T15:18:53.760 回答