我们一般在开发的时候,会将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时,你认为哪一个配置文件会生效呢?