我們一般在開發的時候,會將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