Spring Boot項目在多環境下(開發、生產或測試環境)調用不同配置文件方式


寫在前面

  最近由於項目要求,原先的項目只有開發環境的項目配置,后來不利於線上測試,於是,最近對於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>  
 
對這段代碼做下說明:   
首先在maven中配置了兩個環境的配置文件,一個測試環境test,一個生產環境prod;
其中
<profiles.active></profiles.active>  是變量的key,test是變量的value

注意:<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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM