Spring对外部化配置的加载有明确的顺序。
- 主目录上的Devtools全局设置属性(当Devtools处于活动状态时~/.spring-boot-Devtools.properties(
- @测试上的TestPropertySource注释
- @SpringBootTest#测试的属性注释属性
- 命令行参数
- SPRING_APPLICATION_JSON中的属性(嵌入环境变量或系统属性中的内联JSON(
- Servlet配置初始化参数
- Servlet上下文初始化参数
- java:comp/env中的JNDI属性
- Java系统属性(System.getProperties(((
- 操作系统环境变量
- 一个RandomValuePropertySource,其属性仅为random.*
- 在打包的jar之外配置特定的应用程序属性(application-{Profile}.properties和YAML变体(
- 封装在jar中的概要文件特定的应用程序属性(application-{Profile}.properties和YAML变体(
- 打包jar之外的应用程序属性(Application.properties和YAML变体(
- 封装在jar中的应用程序属性(Application.properties和YAML变体(
- @@Configuration类上的PropertySource注释
- 默认属性(通过设置SpringApplication.setDefaultProperties指定(
然而,Spring Cloud Config中的配置似乎有一个明显的遗漏。有人知道Spring Cloud Config在之上的位置吗
正如其他人所说,配置服务器是第一位的。如果您试图用本地属性(即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.overrideSystemProperties=false如果只有系统属性和env-var应该覆盖远程设置,但不能本地配置文件。
另请参阅关于使用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
文档指出:
引导程序属性在/env端点中显示为高优先级属性源,如以下示例所示
所以它将是位置#0
第12点和第14点涵盖了Spring Cloud配置。
12分析打包jar之外的特定应用程序属性(application-{Profile}.properties和YAML变体(。
14.打包jar之外的应用程序属性(Application.properties和YAML变体(。