springboot项⽬引⽤外部配置⽂件遇到的问题 踩坑集锦 25(一周一更)
问题描述
在搭建springboot项⽬的时候,因为通常情况下,我们会把数据库的⽤户名和密码配置在分组配置⾥⾯,尽管在代码⾥⾯指定了引⼊important.properties,但是分组⾥⾯的配置依然没有⽣效。
之所以没⽣效的原因是和传统应⽤不同,springboot是以jar包形式运⾏的,在jar包启动后查看⽂件⽬录可以看出,实际上important.properties和jar同级,不在classpath下,因此没办法引⼊进来。
查阅资料得知,springboot可以在启动时指定外部配置⽂件的路径来⼿动引⼊外部配置⽂件,因此修改启动脚本如下:
增加引⽤外部配置后发现,代码启动提示缺少app.code等必要配置,但是我的app.code是配置在classpath下的application.properties中的,⽽根据springboot的加载规则,springboot是会加载classpath下的application.properties的,⽽且没有增加外部配置的时候,代码启动没有问题,因此推测是外部配置影响了springboot对配置⽂件的加载.
问题原因
springboot在启动的时候SpringApplication 将从以下位置加载 application.properties ⽂件,并把它们添加到Spring Environment中:
1、config/application.properties(项⽬根⽬录中config⽬录下)
2、config/application.yml
3、application.properties(项⽬根⽬录下)
4、application.yml
5、resources/config/application.properties(项⽬resources⽬录中config⽬录下)
6、resources/config/application.yml
7、resources/application.properties(项⽬的resources⽬录下)
8、resources/application.yml
例如下⾯的项⽬,application.properties标注数字从⼩到⼤,优先级由⾼到底,⾼优先级的配置会覆盖低优先级的配置。
Version:0.9 StartHTML:0000000105 EndHTML:0000001338 StartFragment:0000000141 EndFragment:0000001298
但是如果我们在springboot启动的时候指定配置⽂件读取顺序的话,这种默认加载配置就不会进⾏了,
也就说说,springboot只会读取spring.config.location指定的配置⽂件,就不会⾛默认配置了;
因此当我们在配置了脚本指定spring.config.location为important.properties的时候,springboot就不会再去加载我们项⽬classpath下的application.properties了,导致必要的属性没有加载,致使启动失败。
解决方法
默认加载⽆法⾛,就只能⼿动导⼊application.properties到项⽬⾥⾯了,如下所示:
总结
默认配置什么情况下会⾛,什么情况下不会⾛在使⽤的时候需要考虑清楚,防⽌踩坑。
转载自:https://juejin.cn/post/7129743648605880356