javascript
Spring Boot——不同环境调用不同的配置文件解决方案
問題描述
我們在開發(fā)Spring Boot應(yīng)用時,通常同一套程序會被應(yīng)用和安裝到幾個不同的環(huán)境,比如:開發(fā)、測試、生產(chǎn)等。其中每個環(huán)境的數(shù)據(jù)庫地址、服務(wù)器端口等等配置都會不同,如果在為不同環(huán)境打包時都要頻繁修改配置文件的話,那必將是個非常繁瑣且容易發(fā)生錯誤的事。
多環(huán)境是最常見的配置隔離方式之一,可以根據(jù)不同的運行環(huán)境提供不同的配置信息來應(yīng)對不同的業(yè)務(wù)場景,在Spring Boot內(nèi)支持了多種配置隔離的方式,可以激活單個或者多個配置文件。
官方文檔
https://docs.spring.io/spring-boot/docs/2.3.3.RELEASE/reference/htmlsingle/#boot-features-profiles?
https://docs.spring.io/spring-boot/docs/2.3.3.RELEASE/reference/htmlsingle/#boot-features-external-config-profile-specific-properties
https://docs.spring.io/spring-boot/docs/2.3.3.RELEASE/reference/htmlsingle/#howto-set-active-spring-profiles
解決方案?
Spring Boot多環(huán)境配置
在Spring Boot中多環(huán)境配置文件名需要滿足application-{profile}.properties的格式,其中{profile}對應(yīng)你的環(huán)境標(biāo)識,比如:
?? application-dev.properties:開發(fā)環(huán)境
?? application-test.properties:測試環(huán)境
?? application-prod.properties:生產(chǎn)環(huán)境
?
激活Profiles方式
方法一:配置文件
在application.properties或者application.yml文件中通過spring.profiles.active屬性來設(shè)置,其值對應(yīng){profile}值。
如:spring.profiles.active=test就會加載application-test.properties配置文件內(nèi)容
application.properties中配置通用內(nèi)容,并設(shè)置spring.profiles.active=dev,以開發(fā)環(huán)境為默認(rèn)配置
application-{profile}.properties中配置各個環(huán)境不同的內(nèi)容
方法二:命令行
命令行方式是一種外部配置的方式,在執(zhí)行java -jar命令時可以通過--spring.profiles.active=test的方式進行激活指定的profiles列表。
java -jar xxx.jar --spring.profiles.active=dev針對各環(huán)境新建不同的配置文件application-dev.properties、application-test.properties、application-prod.properties
在這三個文件均都設(shè)置不同的server.port屬性,如:dev環(huán)境設(shè)置為8080,test環(huán)境設(shè)置為9090,prod環(huán)境設(shè)置為80
application.properties中設(shè)置spring.profiles.active=dev,就是說默認(rèn)以dev環(huán)境設(shè)置
測試不同配置的加載:
執(zhí)行java -jar xxx.jar,可以觀察到服務(wù)端口被設(shè)置為8080,也就是默認(rèn)的開發(fā)環(huán)境(dev)
執(zhí)行java -jar xxx.jar --spring.profiles.active=test,可以觀察到服務(wù)端口被設(shè)置為9090,也就是測試環(huán)境的配置(test)
執(zhí)行java -jar xxx.jar --spring.profiles.active=prod,可以觀察到服務(wù)端口被設(shè)置為80,也就是生產(chǎn)環(huán)境的配置(prod)
方法三:Java系統(tǒng)屬性
Java系統(tǒng)屬性方式也是一種外部配置的方式,在執(zhí)行java -jar命令時可以通過-Dspring.profiles.active=test的方式進行激活指定的profiles列表。
使用方式如下所示:
java -Dspring.profiles.active=dev -jar xxx.jar注意:-D方式設(shè)置Java系統(tǒng)屬性要在-jar前定義。
方法四:環(huán)境變量
在程序代碼的application.properties里的spring.profiles.active=uat不變
在本地的開發(fā)環(huán)境/IDE所在的電腦上設(shè)置spring.profiles.active=dev, 在開發(fā)服務(wù)器上也設(shè)置成dev
在uat本地服務(wù)器上,設(shè)置spring.profiles.active=uat或者不設(shè)置它
在prod生產(chǎn)服務(wù)器上,設(shè)置spring.profiles.active=prod
相同的jar或者war包,在不同的服務(wù)器上運行不同的環(huán)境, 不用再手動修改application.properties文件
Linux/MAC環(huán)境下
su rootvim ~/.bash_profile source ~/.bash_profile在~/.bash_profile里最后一行增加
export SPRING_PROFILES_ACTIVE=devWindows環(huán)境下
環(huán)境變量的配置方式請參考Java環(huán)境變量配置,新建一個名為SPRING_PROFILES_ACTIVE的系統(tǒng)環(huán)境變量,設(shè)置變量的值為dev即可。
系統(tǒng)變量的方式適用于系統(tǒng)下所部署統(tǒng)一環(huán)境的SpringBoot應(yīng)用程序,如統(tǒng)一部署的都是prod環(huán)境的應(yīng)用程序。
優(yōu)先級
命令行 > Java系統(tǒng)屬性?> 系統(tǒng)變量?> application.yml或application.properties配置文件>application-default.properties
參考文章
springboot 不同環(huán)境不同的配置
Spring Boot項目在多環(huán)境(開發(fā)、生產(chǎn)或測試環(huán)境)調(diào)用不同配置文件方式
Spring Boot spring.profiles.active 環(huán)境變量配置
SpringBoot系列——利用系統(tǒng)環(huán)境變量與配置文件的分支選擇實現(xiàn)“智能部署”
SpringBoot激活profiles你知道幾種方式?
總結(jié)
以上是生活随笔為你收集整理的Spring Boot——不同环境调用不同的配置文件解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle——Oracle 实现类似
- 下一篇: JAVA——使用Spring Boot