技術(shù)匯總:第十章:Maven Profile動(dòng)態(tài)選擇配置文件
Maven Profile
什么是MavenProfile
在我們平常的java開(kāi)發(fā)中,會(huì)經(jīng)常使用到很多配制文件(xxx.properties,xxx.xml),而當(dāng)我們?cè)诒镜亻_(kāi)發(fā)(dev),測(cè)試環(huán)境測(cè)試(test),線上生產(chǎn)使用(product)時(shí),需要不停的去修改這些配制文件,次數(shù)一多,相當(dāng)麻煩。現(xiàn)在,利用maven的filter和profile功能,我們可實(shí)現(xiàn)在編譯階段簡(jiǎn)單的指定一個(gè)參數(shù)就能切換配制,提高效率,還不容易出錯(cuò).
profile可以讓我們定義一系列的配置信息,然后指定其激活條件。這樣我們就可以定義多個(gè)profile,然后每個(gè)profile對(duì)應(yīng)不同的激活條件和配置信息,從而達(dá)到不同環(huán)境使用不同配置信息的效果。
Maven Profile入門(mén)
修改pinyougou-page-web的pom.xml
<properties>
<port>9105</port>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 指定端口 -->
<port>${port}</port>
<!-- 請(qǐng)求路徑 -->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
運(yùn)行tomcat7:run ,發(fā)現(xiàn)運(yùn)行結(jié)果是一樣的,因?yàn)閜ort是變量,而變量值是定義為9105。這其實(shí)就是我們之前學(xué)習(xí)的maven的變量。
那我們現(xiàn)在思考一下,如果這個(gè)端口在開(kāi)發(fā)時(shí)使用9105,如果在生產(chǎn)環(huán)境(或其他環(huán)境)為9205呢?如何解決值的動(dòng)態(tài)切換呢?
這時(shí)我們修改pom.xml,增加profile定義
<profiles>
<profile>
<id>dev</id>
<properties>
<port>9105</port>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<port>9205</port>
</properties>
</profile>
</profiles>
執(zhí)行命令 tomcat7:run -P pro 發(fā)現(xiàn)以9205端口啟動(dòng)
執(zhí)行命令 tomcat7:run -P dev 發(fā)現(xiàn)以9105端口啟動(dòng)
-P 后邊跟的是profile的id
如果我們只執(zhí)行命令tomcat7:run ,也是以9105啟動(dòng),因?yàn)槲覀円婚_(kāi)始定義的變量值就是9105,就是在不指定profileID時(shí)的默認(rèn)值.
切換數(shù)據(jù)庫(kù)連接配置
編寫(xiě)不同環(huán)境的配置文件
(1)我們?cè)趐inyougou-dao工程中src/main/resources下創(chuàng)建filter文件夾
(2)filter文件夾下創(chuàng)建db_dev.properties ,用于配置開(kāi)發(fā)環(huán)境用到的數(shù)據(jù)庫(kù)
env.jdbc.driver=com.mysql.jdbc.Driver
env.jdbc.url=jdbc:mysql://localhost:3306/pinyougoudb?characterEncoding=utf-8
env.jdbc.username=root
env.jdbc.password=123456
(3)filter文件夾下創(chuàng)建db_pro.properties
env.jdbc.driver=com.mysql.jdbc.Driver
env.jdbc.url=jdbc:mysql://localhost:3306/pinyougoudb_pro?characterEncoding=utf-8
env.jdbc.username=root
env.jdbc.password=123456
(4)修改properties下的db.properties
jdbc.driver=${env.jdbc.driver}
jdbc.url=${env.jdbc.url}
jdbc.username=${env.jdbc.username}
jdbc.password=${env.jdbc.password}
定義Profile
修改pom.xml
<properties>
<env>dev</env>
</properties>
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<env>pro</env>
</properties>
</profile>
</profiles>
這里我們定義了2個(gè)profile,分別是開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境
資源過(guò)濾與變量替換
修改pom.xml ,在build節(jié)點(diǎn)中添加如下配置
<filters>
<filter>src/main/resources/filters/db_${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
這里我們利用filter實(shí)現(xiàn)對(duì)資源文件(resouces) 過(guò)濾
maven filter可利用指定的xxx.properties中對(duì)應(yīng)的key=value對(duì)資源文件中的${key}進(jìn)行替換,最終把你的資源文件中的username=${key}替換成username=value
打包
在pinyougou-dao 工程 執(zhí)行命令:package -P pro , 解壓生成的jar包,觀察db.properties配置文件內(nèi)容,已經(jīng)替換為生產(chǎn)環(huán)境的值。
在pinyougou-sellergoods-service工程 執(zhí)行命令 pageage ,解壓生成的war包里的pinyougou-dao的jar包,發(fā)現(xiàn)也是生成環(huán)境的值。
測(cè)試運(yùn)行
【1】連接生產(chǎn)數(shù)據(jù)庫(kù)
(1)在pinyougou-dao 工程執(zhí)行命令:install -P pro
(2)在pinyougou-sellergoods-service:執(zhí)行命令:tomcat7:run
(3)在pinyougou-shop-web : 執(zhí)行命令:tomcat7:run
【2】連接開(kāi)發(fā)數(shù)據(jù)庫(kù)
(1)在pinyougou-dao 工程執(zhí)行命令:install -P dev (或 install )
(2)在pinyougou-sellergoods-service:執(zhí)行命令:tomcat7:run
(3)在pinyougou-shop-web : 執(zhí)行命令:tomcat7:run
切換注冊(cè)中心連接配置
集中配置注冊(cè)中心地址
在pinyougou-common工程中properties下創(chuàng)建dubbox.properties
address=192.168.0.135:2181
Spring目錄下創(chuàng)建spring配置文件 applicationContext-dubbox.xml 配置如下:
<dubbo:registry protocol="zookeeper" address="${address}"/>
所有的服務(wù)工程與web工程都要依賴pinyougou-common . 并刪除每個(gè)工程中關(guān)于注冊(cè)中心地址的配置
安裝pinyougou-common到本地倉(cāng)庫(kù),然后測(cè)試運(yùn)行。
MavenProfile配置
在pinyougou-common工程中創(chuàng)建filters目錄 ,目錄下建立dubbox_dev.properties
env.address=192.168.25.135:2181
建立dubbox_pro.properties
env.address=192.168.25.136:2181
修改dubbox.properties
address=${env.address}
修改pinyougou-common的pom.xml
<properties>
<env>dev</env>
</properties>
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<env>pro</env>
</properties>
</profile>
</profiles>
.............................
<build>
<filters>
<filter>src/main/resources/filters/dubbox_${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
參考資料:https://www.cnblogs.com/0201zcr/p/6262762.html