SpringBoot 配置文件加载优先级
我们一般在开发的时候,会将application.yml或者application.properties文件放在resources目录下,然后根据不同的环境加载不同的profile,比如以下的目录结构:
resources
├─ application.yml
├─ application-test.yml
├─ application-dev.yml
├─ application-prod.yml
└─ log4j2-spring.xml
其中,我们可以在application.yml里面使用以下的配置来激活对应的profile(你暂时可以理解带后缀的配置文件例如-test.yml,它被称之为profile):
spring:
profiles:
active: dev
当我们在application.yml中使用以上的配置时,application-dev.yml将会生效,但此时仍旧有一个问题,那就是我们如何在不修改jar包的情况下对这些配置文件进行更改?或者更确切的来说,我们如何将这些文件放在jar包以外,好让我们在更改配置的时候无需重新打包?
SpringBoot默认会根据以下的顺序优先级来加载配置文件:
- 将这些配置存放在当前jar包的config目录(文件夹)下(也就是一个目录下既包含我们的jar包,也包含跟jar包同级目录的config目录下的配置文件)。
- 将这些配置存放在当前jar包平级的目录(文件夹)下(也就是一个目录下既包含我们的jar包,也包含我们的配置文件)
- 在jar包内(也就是classpath)的config目录下,在打包之前对应resources/config这个目录。
- 最后才是jar包内的根目录,也就是resources目录下,我们一般生成SpringBoot项目时,默认的会创建一个application.properties。
看文字或许你不太明白,比如我们有一个app.jar是我们最终打包出来的应用程序那么:
./
├─ app.jar
├─ application.yml
└─ config
└─application.yml
当我们运行如下的命令启动我们的app.jar时,你认为哪一个配置文件会生效呢?
java -jar app.jar
答案是config/application.yml的文件会生效,同样的,在application.yml内激活的profile也遵循这个优先规则,另外可以参考一下我之前的一篇文章:https://www.cnblogs.com/xingxueliao/p/7113651.html
转载请注明来源,谢谢。