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

寫在前面

       最近因爲項目要求,原先的項目只有開發環境的項目配置,後來不利於線上測試,因而,最近對於SpringBoot這部分多環境配置在網上查找了相關資料,並實現了配置,因而爲了防止遺忘,特在此進行總結。在此,感謝如下博主的文章:http://www.javashuo.com/article/p-xjzsarrh-nn.htmlhttp://www.javashuo.com/article/p-kffplvoa-nm.htmljava

       好啦,廢話很少說,開啓正文(好像很正式的樣子呢。。。。。。)spring

SpringBoot多環境配置文件

下面以一個小案例,進行說明。springboot

如圖所示,下圖是案例中的三個配置文件,其中,服務器

application.yml是啓動服務時,服務器會自動加載的配置文件,app

application-dev.yml 表示的是開發環境的配置文件,maven

application-prod.yml 表示的是生產環境的配置文件,ide

對於,dev和prod這兩個文件在啓動服務時,服務器不會自動加載,那麼在不一樣的環境中時怎麼調用不一樣的文件的呢?測試

 主要有如下兩種方式:idea

方式一:經過修改配置文件 application.yml中Spring.profile.active的值,來指定加載的配置,

也就是說,若是Spring.proflie.active=dev,則在啓動服務以後,服務器就會加載application-dev.yml,若值爲test或者prod,修改方式一致。

下面上圖說明:

方式二:使用命令啓動服務,命令中帶參數方式(此方式能夠沒有application.yml文件)

具體操做步驟以下:spa

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等只是演示案例中名字,並不是全部項目都是如此,還請各位以實際項目爲主。

相關文章
相關標籤/搜索