赞
踩
关于SpringBoot配置文件的优先级,官网给出了下面这段话:
但按照我对他的文字理解和验证结果对不上。下面结合源码和验证结果,简单说一下我对这个规则的理解。
SpringBoot配置文件的优先级,按我理解(见上图):
归并结果时:
问题:spring.config.additional-location下的yml是否生效(最终覆盖,最高优先级)?
现有一个test项目,将profile设置为deploy编译,编译后如下:
启动test项目时,加上启动参数(注意,当spring.config.additional-location指定为目录时,最后一定要加斜杠"/",否则报错):
spring.config.additional-location=file:E:/project/demo/config/
而 E:/project/demo/config/ 下也有一个同名的 application-deploy.yml
答案:从上述表格可知生效,E:/project/demo/config/ 下的application-deploy.yml优先级最高
场景1当中,其他不变,将E:/project/demo/config/ 下也有一个同名的 application-deploy.yml 改名为 application.yml
答案:从上述表格可知不生效,classpath(target/classes)下的application-deploy.yml优先级最高
场景1当中,其他不变,将启动参数改为
spring.config.additional-location=file:E:/project/demo/config/application-deploy.yml
答案:从上述表格可知不生效,classpath(target/classes)下的application-deploy.yml优先级最高
为什么上述表格这么填。因为默认profile(null)优先级是最低的,所以肯定先对它进行搜索。
基本上逻辑都在ConfigFileApplicationListener,但我并没有完全看懂
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。