寫在前面
最近由於項目要求,原先的項目只有開發環境的項目配置,后來不利於線上測試,於是,最近對於SpringBoot這部分多環境配置在網上查找了相關資料,並實現了配置,於是為了防止遺忘,特在此進行總結。
好啦,廢話不多說,開啟正文(好像很正式的樣子呢。。。。。。)
SpringBoot多環境配置文件
下面以一個小案例,進行說明。
如圖所示,下圖是案例中的三個配置文件,其中,
application.yml是啟動服務時,服務器會自動加載的配置文件,
application-dev.yml 表示的是開發環境的配置文件,
application-prod.yml 表示的是生產環境的配置文件,
對於,dev和prod這兩個文件在啟動服務時,服務器不會自動加載,那么在不同的環境中時怎么調用不同的文件的呢?
主要有以下兩種方式:
方式一:通過修改配置文件 application.yml中Spring.profile.active的值,來指定加載的配置,
也就是說,如果Spring.proflie.active=dev,則在啟動服務之后,服務器就會加載application-dev.yml,若值為test或者prod,修改方式一致。
下面上圖說明:
方式二:使用命令啟動服務,命令中帶參數方式(此方式可以沒有application.yml文件)
具體操作步驟如下:
1> 進入到項目目錄下,先用mvn install命令對項目進行打包,執行完此步驟后,會在項目對應的target目錄下生成該項目對應的jar包
2> 進入target目錄,執行命令:java -jar 生成的jar包 --spring.profiles.active=prod
通過此命令之后,項目就會調用application-prod.yml配置文件,即以生產環境的配置要求啟動服務。同理,若是開發環境,只需將prod改為dev即可。
方式三:此種方式是根據方式一延伸出的,更為靈活
具體步驟如下:
1> application.yml中將spring.profiles.active的值改成spring.profiles.active=@activatedProperties@,這里的@activatedProperties@是一個變量對應pom文件里的環境配置。
下面為pom文件的配置<profiles> <profile>
<id>dev</id> <properties> <!-- 環境標識,需要與配置文件的名稱相對應 --> <activatedProperties>dev</activatedProperties> </properties> <activation> <!-- 默認環境 --> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <!-- 測試環境 --> <activatedProperties>test</activatedProperties> </properties> </profile> <profile> <id>prod</id> <properties> <!-- 生產環境 --> <activatedProperties>prod</activatedProperties> </properties> </profile> </profiles>
注意:<activatedProperties>dev</activatedProperties>中的dev與配置文件名稱application-dev.yml要一致
activatedProperties名稱對應application.properties配置文件中的spring.profiles.active=@activatedProperties@
當maven打包時會用pom文件里<activatedProperties>dev</activatedProperties>中的值替換掉application.properties配置文件中的@activatedProperties@
2> 執行Maven打包命令mvn clean package,觀察控制台日志
已經構建成功,刷新一下項目,target會生成SpringbootMybatis-0.0.1-SNAPSHOT.jar包。
可能出現的問題
1.=='@' that cannot start any token. (Do not use @ for indentation)
在本地啟動該項目時有時候會報如下錯誤
found character '@' that cannot start any token. (Do not use @ for indentation) in 'reader', line 4, column 11: name: @profiles.active@
意思是識別不了@profiles.active@這個變量,這是因為這個變量沒有被替換成我們需要的參數,如test,prod等,所以在本地啟動時要加上參數啟動,這樣springboot會自動替換掉這個變量。
作者使用的是idea,所以啟動springboot時在右上Edit Configurations-->Active Profiles 增加一個參數,參數值為你需要運行的環境名稱,如test

注:上述中的application-dev.yml、application-prod.myl等只是演示案例中名字,並非所有項目都是如此,還請各位以實際項目為主。
在此,感謝以下博主的文章:
https://blog.csdn.net/qq_35139965/article/details/82255479
https://blog.csdn.net/weixin_33347597/article/details/81039153