SpringBoot 项目打包为jar以后,在jar里面的resources有xxx.properties,此
时在存放jar的同级目录创建config,并在config放xxx.properties,则加载顺序是怎么样的呢?
目录层级如下:
desktop-api
--config
application.properties
application-prod.properties
--desktop-api.jar
--BOOT-INF
--classes
application.properties
application-prod.properties
加载顺序依次是:
1、jar的classes里面的application.properties
2、当前路径下的application.properties
3、jar的classes里面config文件夹下的application.properties
4、当前路径config文件夹里面的application.properties
注意:遇到多个配置文件有相同配置时后加载的配置会覆盖前面加载的配置。
通用规则:
SpringApplication会从以下路径加载所有的application.properties文件:
1、file:./config/(当前目录下的config文件夹)
2、file:./(当前目录)
3、classpath:/config/(classpath下的config目录)
4、classpath:/(classpath根目录)
优先级由上至下。
注意:优先级是指属性最后使用的值,而不是说仅仅扫描优先级高的路径,不是发现了application.properties文件就停止。
优先级说明:假设上面 1、2、3、4 都存在配置文件,那么配置文件 1 的优先级最高
springboot中可以配置多个配置文件,并且这些配置文件是可以共存的。当属性相同时,优先级高的配置文件会覆盖优先级低的配置文件中的属性。当属性不同时,最终的配置会取各个配置文件中属性的并集。
可查看Spring的这个类 ConfigFileApplicationListener
,这个类有个 load
方法加载配置文件可以 debug 看一下