Spring Cloud Config中属性的加载优先顺序是什么?

时间:2018-07-22 23:00:16

标签: java spring spring-boot spring-config

Spring对于externalized configurations的加载有明确的顺序。

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

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

3 个答案:

答案 0 :(得分:0)

文档指出:

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

所以它将是位置#0

答案 1 :(得分:0)

第12点和第14点涉及Spring Cloud Config。

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

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

答案 2 :(得分:0)

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

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

根据documentation

由应用程序添加到您的应用程序的属性源 引导上下文通常是“远程”的(例如,来自Config Server),并且 默认情况下,它们不能在本地被覆盖。如果要允许您的应用程序覆盖远程 属性及其自己的系统属性或配置文件, 远程属性源必须通过设置授予它权限 spring.cloud.config.allowOverride = true(设置此项无效 本地)。设置该标志后,可以进行一些更精细的设置 控制与系统有关的远程属性的位置 属性和应用程序的本地配置: spring.cloud.config.overrideNone = true以使用任何本地替代 财产来源,以及 如果只有System,spring.cloud.config.overrideSystemProperties = false 属性和环境变量应覆盖远程设置,但不能 本地配置文件。

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

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

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

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