yml和properties加载顺序

来源:1-8 配置负载均衡策略

weixin_慕田峪6397672

2021-03-06 10:41:15


​ConfigFileApplicationListener中这一段代码

http://img.mukewang.com/climg/6042e80c09322fd314500430.jpg

http://img.mukewang.com/climg/6042e82409e2e80613180128.jpg

PropertiesPropertySourceLoader中顺序是

http://img.mukewang.com/climg/6042e8a4097945c112340250.jpg

YamlPropertySourceLoader中顺序是

http://img.mukewang.com/climg/6042e8d209f77a8009680268.jpg

所以最终加载顺序是:
properties->xml->yml->yaml
在PropertySourcesPropertyResolver中有个getProperty方法

http://img.mukewang.com/climg/6042ead0090a0b4a16381142.jpg

根据配置文件中的key获取value,如果获取到value,直接返回。可见在
application.properties和在application.properties配置相同的
属性并不是后面的覆盖前面的,而是在前面根据key获取到了,直接返回,
不会再取后面的了。
老师,不知我这样是否正确?


写回答

1回答

姚半仙

2021-03-07

读取文件背后还有另一个层面,即“目录”概念,在同一个目录中,文件加载顺序和同学说的是一致的,但是对不同层级的目录来说,比如根目录下和resource文件目录下的文件,这之间加载也有一个先后顺序之分。


关于属性覆盖,同学可以参考官网,摘抄一段引用如下:

Spring Boot uses a very particular PropertySource order that is designed to allow sensible overriding of values. Properties are considered in the following order (with values from lower items overriding earlier ones):


https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config。



spring cloud里也有开关控制远程属性是否覆盖本地属性。

0

Java架构师-技术专家

千万级电商项目从0到100全过程,覆盖Java程序员不同成长阶段的核心问题与解决方案

2672 学习 · 5839 问题

查看课程