springboot加载properties和yml配置文件的顺序

springboot加载properties和yml配置文件的顺序,第1张

假设一个项目在同一位置同时存在application.properties和application.yml文件,

且其中都含有相同的某个key,但value不同,如:

application.properties中:server.port=8001,

application.yml中:server.port=8888。

问题:springboot是否都加载这两个配置文件?如果两个文件有相同的key,取哪一个文件的value?

答: 都加载,且按properties→yml的顺序加载。

在看到spring.factories中,配置加载器顺序是先执行PropertiesPropertySourceLoader再到YamlPropertySourceLoader。

在ConfigFileApplicationListener获取server.port这个key的value时候,可以发现两配置文件全都加载进去了,且注意顺序,application.properties文件在前。

getSource()方法获取到两个Source,先从application.properties文件中查找值,一旦找到立即返回,如果找不到再从application.yml中查找。

一、本分析基于以下应用版本:

1、JDK:OpenJDK 11

2、SpringBoot:2.3.0.RELEASE

3、SpringCloud:Hoxton.SR4

4、Nacos:2.2.1.RELEASE

二、bootstrap.properties 配置信息如下:

# 环境参数 dev,sit,prod

spring.profiles.active=dev

spring.application.name=demo-core

spring.cloud.nacos.config.server-addr=http://***

pring.cloud.nacos.config.username=******

spring.cloud.nacos.config.password=******

spring.cloud.nacos.config.group=LDC_GROUP

spring.cloud.nacos.config.extension-configs[0].data-id=${spring.application.name}-ext.properties

spring.cloud.nacos.config.extension-configs[0].group=LDC_GROUP

spring.cloud.nacos.config.extension-configs[0].refresh=true

spring.cloud.nacos.config.extension-configs[1].data-id=${spring.application.name}-ext1.properties

spring.cloud.nacos.config.extension-configs[1].group=LDC_GROUP

spring.cloud.nacos.config.extension-configs[1].refresh=true

spring.cloud.nacos.config.shared-configs[0].data-id=${spring.application.name}-share.properties

spring.cloud.nacos.config.shared-configs[0].group=LDC_GROUPP

spring.cloud.nacos.config.shared-configs[0].refresh=true

# 生产环境或测试环境去掉,个人调试时可以指定

spring.cloud.nacos.config.namespace=wenda

三、测试结果分析总结如下:

1、demo-core-dev.properties与demo-core.properties

在以上设置中,demo-core.properties会自动加载,无需再额外指定。同时,若demo-core-dev.properties和demo-core.properties有相同的配置参数,则以demo-core-dev.properties中的值为准。demo-core.properties不会对demo-core-dev.properties中的相同参数产生覆盖。

2、extension-configs和shared-configs都不会覆盖demo-core.properties和demo-core-dev.properties中相同的参数配置。

3、extension-configs和shared-configs若存在相同参数,则extension-configs中的参数为准,且跟extension-configs和shared-configs的配置顺序无关

4、extension-configs的集合配置中若存在相同参数,也只以顺序有关,即谁在后面系统就使用谁的参数值。shared-configs集也是样。

5、若在Nacos中nacos.core.auth.enabled设为了true,则配置文件中必须指定spring.cloud.nacos.config.password和spring.cloud.nacos.config.group的值

6、必须在类中加入@RefreshScope,@Value注入的值才能无重启自动刷新。

解析顺序是,classpath:/

以上顺序按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级的配置内容会覆盖低优先级配置的内容,其中配置文件中的内容是互补配置,即

存在相同的配置内容,高优先级的内容会覆盖低优先级的内容

存在不同的内容的时候,高优先级和低优先级的配置内容取并集


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8078187.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存