假设一个项目在同一位置同时存在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中查找。