我們有這樣的一個springboot項目。項目分為開發、測試、生產三個不同階段(環境),每個階段都會有db、ftp、redis等的不同配置信息。我們可以使用spring.profiles.include來實現三種不同環境的一鍵切換。
項目總(入口)配置文件:
bootstrap.yml ,內容如下
spring.profiles.active: dev #dev、test、prod 三種配置可以在這里進行一鍵切換,默認激活 dev(開發)環境配置
項目開發環境配置文件:
application-dev.yml (開發環境入口配置)、application-devDb.yml 、application-devFtp.yml、application-devRedis.yml
application-dev.yml 中含有如下內容
spring.profiles.include: devDb,devFtp,devRedis
項目測試環境配置文件:
application-test.yml (測試環境入口配置)、application-testDb.yml 、application-testFtp.yml、application-testRedis.yml
application-test.yml 中含有如下內容
spring.profiles.include: testDb,testFtp,testRedis
項目生產環境配置文件:
application-prod.yml (生產環境入口配置)、application-prodDb.yml 、application-prodFtp.yml、application-prodRedis.yml
application-prod.yml 中含有如下內容
spring.profiles.include: prodDb,prodFtp,prodRedis
spring.profiles.include 的作用是可以疊加激活新的profile ,這樣可以在總的項目配置(bootstrap.yml)中實現一鍵切換dev、test、prod三者不同環境, 即
切換為dev時,同時激活了dev、devDb、devFtp、devRedis 的profile
切換為test時,同時激活了test、testDb、testFtp、testRedis 的profile
切換為prod時,同時激活了prod、prodDb、prodFtp、prodRedis 的profile
另外: 在yml配置文件中配置List<String> 的值,可以采用 -子項 的方式,如 :
spring.profiles.include:
- 子項1
- 子項2
- 子項3
也可以采用 逗號分隔元素列表的方式,如:
spring.profiles.include: 子項1,子項2,子項3
通過一個測試了解:spring.profiles.active和spring.profiles.include的區別
源引自:https://blog.csdn.net/happyblueice/article/details/86538843
application.properties文件內容
spring.profiles.active=test4 pring.profiles.include=test3,test5 version=1 name=Tom
application-test2.properties文件內容
pring.profiles.include=test3,test4 version=2
application-test3.properties文件內容
version=3 name=Allen
application-test4.properties文件內容
name=Jimapplication-test5.properties
version=5 name=Ifty
無參啟動例如 java -jar example.jar 先加載application.properties文件 最終version=5,name=Jim 有參啟動例如 java -jar example.jar --spring.profiles.active=test2 先加載application-test2.properties文件,再加載application.properties文件 最終version=2,name=Ifty 總結: 多個配置文件中有同一個值,以下情況獲取值的效果: 1.啟動命令不帶--spring.profiles.active參數以application.properties首先啟動 按順序所有文件第一個配置的spring.profiles.active屬性中指定的最后一個文件中含有該屬性的值為准 如果所有文件都沒有spring.profiles.active,那么以pring.profiles.include配置的最后一個屬性文件中的值為准 2.啟動命令帶--spring.profiles.active參數以參數指定的屬性文件首先啟動 此情況,已命令指定的配置文件中的值為准,其他文件中再配置spring.profiles.active也不會生效,如果不存在值,那么會以pring.profiles.include指定的最后一個文件中的值為准 簡要說 啟動命令spring.profiles.active指定文件中的值 > 文件中spring.profiles.active指定的文件列表中最后一次出現的值 > 文件中spring.profiles.include指定的文件列表中最后一次出現的值 (注意:無論是否配置啟動命令參數指定文件,最后都會加載application.properties,它里邊配置的信息也很關鍵)
參考文章:
https://blog.csdn.net/jasnet_u/article/details/82995845
https://blog.csdn.net/happyblueice/article/details/86538843