javascript
[Spring Boot 系列] 集成maven和Spring boot的profile 专题
maven中配置profile節(jié)點(diǎn):
復(fù)制代碼
<project>
…
<profiles>
<profile>
<!-- 生產(chǎn)環(huán)境 -->
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
</profile>
<profile>
<!-- 本地開(kāi)發(fā)環(huán)境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 測(cè)試環(huán)境 -->
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
</profiles>
</project>
復(fù)制代碼
spring boot application.properties文件中引用maven profile節(jié)點(diǎn)的值:
spring.profiles.active=@profiles.active@
http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle/
非spring boot 項(xiàng)目中配置
http://www.itwendao.com/article/detail/85631.html
http://zilongsky-gmail-com.iteye.com/blog/2032001
http://dolszewski.com/spring/spring-boot-properties-per-maven-profile/
1.概述
按照項(xiàng)目開(kāi)發(fā)的流程,項(xiàng)目工程需要經(jīng)歷開(kāi)發(fā)人員本地測(cè)試環(huán)境(dev),進(jìn)入測(cè)試階段后有測(cè)試環(huán)境(test),測(cè)試無(wú)誤后需要將程序發(fā)布到生產(chǎn)環(huán)境(production)下,而對(duì)于這三個(gè)不同的項(xiàng)目環(huán)境,應(yīng)用程序要在該環(huán)境下運(yùn)行,必須有不同的配置項(xiàng),如開(kāi)發(fā)和生產(chǎn)環(huán)境使用不同的數(shù)據(jù)庫(kù)地址,不同的線程池參數(shù),因此需要對(duì)不同的項(xiàng)目環(huán)境進(jìn)行不同的配置,為了簡(jiǎn)化和規(guī)范這些參數(shù)配置,需要對(duì)其進(jìn)行統(tǒng)一規(guī)范管理。
2.配置項(xiàng)管理
2.1三個(gè)環(huán)境
按照項(xiàng)目所處階段,分為
開(kāi)發(fā)環(huán)境(dev)
該環(huán)境下的配置項(xiàng)只影響開(kāi)發(fā)人員本地代碼配置,在項(xiàng)目初期代碼本地編寫(xiě)調(diào)試時(shí)啟用,如可以設(shè)置更低的Log級(jí)別幫助開(kāi)發(fā)人員查看更為詳細(xì)的log信息。測(cè)試環(huán)境(test)
該環(huán)境配置影響整個(gè)團(tuán)隊(duì)的測(cè)試環(huán)境。正式生產(chǎn)環(huán)境(production)
程序最終發(fā)布后所需要的參數(shù)配置,該環(huán)境下的配置項(xiàng)修改將直接影響最終用戶的使用和應(yīng)用程序的運(yùn)行。系統(tǒng)的配置項(xiàng)統(tǒng)一放在src/main/filters/目錄下,三個(gè)環(huán)境的配置文件分別為
filter-dev.properties
filter-test.properties
filter-production.properties
這三個(gè)文件的用法見(jiàn)2.3.2節(jié)介紹
2.2識(shí)別配置項(xiàng)
開(kāi)發(fā)人員在做日常需求時(shí),需要對(duì)程序的配置項(xiàng)進(jìn)行識(shí)別,嚴(yán)格禁止將變量寫(xiě)死代碼的情況出現(xiàn)。下列情況下需要考慮將變量作為系統(tǒng)的配置項(xiàng)
數(shù)據(jù)庫(kù)連接參數(shù),日志級(jí)別
對(duì)于不同的環(huán)境下所依賴的外部webservice也應(yīng)該根據(jù)所處環(huán)境不同依賴不同的地址,如開(kāi)發(fā)環(huán)境下依賴外部系統(tǒng)開(kāi)發(fā)環(huán)境的地址。
系統(tǒng)可能要使用一些業(yè)務(wù)數(shù)據(jù),如對(duì)某一個(gè)崗位信息特殊處理,該崗位信息在生產(chǎn)開(kāi)發(fā)環(huán)境數(shù)據(jù)庫(kù)中的id不一致,這種情況下也需要將其作為配置項(xiàng)處理。
2.3Maven配置
項(xiàng)目工程統(tǒng)一使用maven的profile插件定義不同的項(xiàng)目構(gòu)建環(huán)境(dev, test, production),通過(guò)filter插件為不同環(huán)境下的配置項(xiàng)注入對(duì)應(yīng)的參數(shù)值來(lái)實(shí)現(xiàn)動(dòng)態(tài)配置目標(biāo)。
2.3.1定義profile
在POM.xml中配置3個(gè)profile,對(duì)應(yīng)項(xiàng)目所處的3個(gè)不同的環(huán)境-dev, test, production, profile的id屬性即為每個(gè)環(huán)境賦予一個(gè)唯一的標(biāo)示,元素的內(nèi)容則是以key-value的形式出現(xiàn)的鍵值對(duì),如我們定義了一個(gè)變量,其值在不同的環(huán)境下(不同id)被賦予了不同的值(dev, production, test),要激活不同的環(huán)境打包,我們可以在命令行通過(guò)mvn package –P${profileId}來(lái)讓其運(yùn)行,為了開(kāi)發(fā)便利,默認(rèn)激活的是dev開(kāi)發(fā)環(huán)境,即開(kāi)發(fā)人員不需要通過(guò)命令行手動(dòng)輸入-p參數(shù)也能運(yùn)行dev環(huán)境的打包。
2.3.2定義filter(由filter插件完成此操作)
可以使用Maven來(lái)對(duì)項(xiàng)目資源進(jìn)行變量替換。在資源過(guò)濾被激活的時(shí)候,Maven會(huì)掃描資源,尋找由${}包圍的Maven屬性的引用。
一旦它找到這些引用,它就會(huì)使用合適的值去替換它們,當(dāng)需要根據(jù)目標(biāo)部署平臺(tái)使用不同的配置來(lái)參數(shù)化一個(gè)構(gòu)建的時(shí)候,這就非常有用。
通常一個(gè)在src/main/resources目錄下的.properties文件或者XML文檔會(huì)包含對(duì)外部資源的引用,如需要根據(jù)目標(biāo)部署平臺(tái)進(jìn)行不同配置的數(shù)據(jù)庫(kù)或網(wǎng)絡(luò)地址。
例如,一個(gè)從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)的系統(tǒng)有一個(gè)XML文檔,其包含了數(shù)據(jù)庫(kù)的JDBC URL以及安全憑證。如果你在開(kāi)發(fā)和產(chǎn)品環(huán)境使用不同的數(shù)據(jù)庫(kù),使用Maven Profile來(lái)為不同的部署環(huán)境定義不同的配置。
Filter的配置(在元素下添加節(jié)點(diǎn))如下:
首先引入配置文件的地址,2.1節(jié)已經(jīng)介紹過(guò)統(tǒng)一放在src/main/filters目錄下,注意這個(gè)filter的配置有個(gè)filter-env.properties,這個(gè){env}.properties,這個(gè)env.properties,這個(gè){env}變量就是在父pom.xml中定義的profile的id,
當(dāng)通過(guò)命令行mvn package –PprofileId時(shí),按{profileId}時(shí),按profileId時(shí),按{env}變量就會(huì)用實(shí)際傳入的值替換,從而達(dá)到針對(duì)不同環(huán)境采用不同配置文件的目的。
如在src/main/resources/目錄下的env.properties文件的內(nèi)容如下
database connection configuration
jdbc.driverClassName=${jdbc.driverClassName}
jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}
當(dāng)執(zhí)行完畢打包操作后,位于war包中的env.properties文件中所有被的${}都會(huì)被filters下文件中的值所替換。
http://blog.csdn.net/z69183787/article/details/48733331
http://blog.sina.com.cn/s/blog_6c969b4a0102wfks.html
由于項(xiàng)目的需要, 今天給spirng boot項(xiàng)目添加了profile功能。再網(wǎng)上搜索了一圈,也沒(méi)有找到滿意的參考資料,其實(shí)配置并不難,就是沒(méi)有一個(gè)one stop(一站式)講解的地方,所以有了寫(xiě)這篇博客的想法。由于本人水平有限,文中任何錯(cuò)誤和紕漏歡迎大家反饋。希望本文可以給你帶來(lái)幫助。本文實(shí)現(xiàn)的目標(biāo):1 使用了maven的profile功能2 使用了Spring Boot的profile功能3 集成了1和2的功能4 在eclipse中運(yùn)行mvn工程,使用開(kāi)發(fā)環(huán)境的profile。5 通過(guò)mvn在命令行中打包時(shí),可以指定相應(yīng)的profile。什么是profile,解決什么問(wèn)題呢?舉個(gè)例子。一般在開(kāi)發(fā)項(xiàng)目的時(shí)候要有多個(gè)環(huán)境,如開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境,他們的配置文件一般不同。當(dāng)我們要向各個(gè)環(huán)境發(fā)布程序時(shí),需要人工處理這些配置文件,這顯然麻煩且易錯(cuò)。有了profile,一切問(wèn)題就簡(jiǎn)單了。只要在maven打包時(shí)使用下面命令即可。
[plain] view plain copy
mvn clean package -Dmaven.test.skip=true -P prod
解釋一下, -P prod 就是告訴maven要使用名字為prod的profile來(lái)打包,即所有的配置文件都使用生產(chǎn)環(huán)境(prod是自己定義的,在這里自定義為生產(chǎn)環(huán)境)。
實(shí)現(xiàn)思路簡(jiǎn)述:
maven支持profile功能,當(dāng)使用maven profile打包時(shí),可以打包指定目錄和指定文件,且可以修改文件中的變量。spring boot也支持profile功能,只要在application.properties文件中指定spring.profiles.active=xxx 即可,其中xxx是一個(gè)變量,當(dāng)maven打包時(shí),修改這個(gè)變量即可。具體實(shí)現(xiàn):
A段,介紹coolpro工程的配置。
這個(gè)工程只需要修改pom.xml文件即可,需要定義具體maven的profile。定義完畢之后,當(dāng)我們使用mvn clean package -P dev 時(shí),maven就知道了profileActive=dev這個(gè)屬性生效了。其中profileActive可以自己定義,就是一個(gè)maven的自定義屬性。pom.xml文件如下:B段,介紹coolpro-api工程的配置
這個(gè)工程是一個(gè)web工程,主要是想根據(jù)指定的profile配置相應(yīng)的spring boot運(yùn)行環(huán)境。如:如果profile是dev,配置web服務(wù)器的監(jiān)聽(tīng)端口為8010;profile為test,則端口為8020;profile為prod,則端口為8030。 工程中有4個(gè)文件:application.properties, 包含通用配置的文件。文件中有spring.profiles.active=@profileActive@的屬性。spring boot的profile是通過(guò)spring.profiles.active屬性來(lái)配置的,這里的profileActive和上面coolpro工程中配置的profileActive屬性名要一致。這樣,在運(yùn)行mvn命令時(shí),maven就會(huì)幫我們將@profileActive@替換成指定的profile。application-dev.properties, 當(dāng)mvn -P dev時(shí), 需要打包這個(gè)文件。application-test.properties, 當(dāng)mvn -P test時(shí), 需要打包這個(gè)文件。application-prod.properties, 當(dāng)mvn -P prod時(shí), 需要打包這個(gè)文件。pom.xml配置:application.properties文件:其他3個(gè)文件見(jiàn)截圖:C段,介紹coolpro-core工程的配置
配置完成了。看效果。
1 在Eclipse環(huán)境中,直接運(yùn)行項(xiàng)目。
2 使用maven命令,打包這個(gè)應(yīng)用。
1)以開(kāi)發(fā)環(huán)境打包:mvn clean package -Dmaven.test.skip=true -P dev -e 結(jié)果如下:查看api工程:查看core工程:以此類推, 可以運(yùn)行
mvn clean package -Dmaven.test.skip=true -P test -e mvn clean package -Dmaven.test.skip=true -P prod -e注意兩點(diǎn):
1 在屬性文件中替換變量時(shí),使用@符合。 最開(kāi)始,使用$符號(hào),就是不能替換,在網(wǎng)上搜索一下,原來(lái)是maven的maven-resources-plugin可以定義這個(gè)替換的符號(hào)。通過(guò)eclipse提供的Maven Pom editor編輯器打開(kāi)pom.xml文件,在“Effective POM”選項(xiàng)卡中,可以看到定義的是@這個(gè)符號(hào)。2 怎么在啟動(dòng)spring boot應(yīng)用時(shí),打印正在使用的profile,避免配置錯(cuò)誤呢?可以參考如下代碼。[java] view plain copy
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(RestApiApplication.class, args);
String[] activeProfiles = ctx.getEnvironment().getActiveProfiles();
for (String profile : activeProfiles) {
logger.warn(“Spring Boot 使用profile為:{}” , profile);
}
}
參考:http://docs.spring.io/spring-boot/docs/current/reference/html/
http://www.tuicool.com/articles/NjqAF3http://blog.csdn.net/jbgtwang/article/details/8642979http://zilongsky-gmail-com.iteye.com/blog/2032001http://www.huangyunkun.com/2015/01/01/run-code-after-spring-boot-started/http://blog.csdn.net/lihe2008125/article/details/50443491
總結(jié)
以上是生活随笔為你收集整理的[Spring Boot 系列] 集成maven和Spring boot的profile 专题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Ubuntu16.04搜索不到wifi
- 下一篇: 网页制作案例2-个人简历制作