且其中都含有相同的某个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:/以上顺序按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级的配置内容会覆盖低优先级配置的内容,其中配置文件中的内容是互补配置,即
存在相同的配置内容,高优先级的内容会覆盖低优先级的内容
存在不同的内容的时候,高优先级和低优先级的配置内容取并集
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)