Loading

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默认会根据以下的顺序优先级来加载配置文件:

  1. 将这些配置存放在当前jar包的config目录(文件夹)下(也就是一个目录下既包含我们的jar包,也包含跟jar包同级目录的config目录下的配置文件)。
  2. 将这些配置存放在当前jar包平级的目录(文件夹)下(也就是一个目录下既包含我们的jar包,也包含我们的配置文件)
  3. 在jar包内(也就是classpath)的config目录下,在打包之前对应resources/config这个目录。
  4. 最后才是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

 

posted @ 2020-08-07 10:45  XingxueLiao  阅读(1176)  评论(0编辑  收藏  举报