技術匯總:第十章:Maven Profile動態(tài)選擇配置文件
Maven Profile
什么是MavenProfile
在我們平常的java開發(fā)中,會經(jīng)常使用到很多配制文件(xxx.properties,xxx.xml),而當我們在本地開發(fā)(dev),測試環(huán)境測試(test),線上生產(chǎn)使用(product)時,需要不停的去修改這些配制文件,次數(shù)一多,相當麻煩?,F(xiàn)在,利用maven的filter和profile功能,我們可實現(xiàn)在編譯階段簡單的指定一個參數(shù)就能切換配制,提高效率,還不容易出錯.
profile可以讓我們定義一系列的配置信息,然后指定其激活條件。這樣我們就可以定義多個profile,然后每個profile對應不同的激活條件和配置信息,從而達到不同環(huán)境使用不同配置信息的效果。
Maven Profile入門
修改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>
<!-- 請求路徑 -->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
運行tomcat7:run ,發(fā)現(xiàn)運行結果是一樣的,因為port是變量,而變量值是定義為9105。這其實就是我們之前學習的maven的變量。
那我們現(xiàn)在思考一下,如果這個端口在開發(fā)時使用9105,如果在生產(chǎn)環(huán)境(或其他環(huán)境)為9205呢?如何解決值的動態(tài)切換呢?
這時我們修改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端口啟動
執(zhí)行命令 tomcat7:run -P dev 發(fā)現(xiàn)以9105端口啟動
-P 后邊跟的是profile的id
如果我們只執(zhí)行命令tomcat7:run ,也是以9105啟動,因為我們一開始定義的變量值就是9105,就是在不指定profileID時的默認值.
切換數(shù)據(jù)庫連接配置
編寫不同環(huán)境的配置文件
(1)我們在pinyougou-dao工程中src/main/resources下創(chuàng)建filter文件夾
(2)filter文件夾下創(chuàng)建db_dev.properties ,用于配置開發(fā)環(huán)境用到的數(shù)據(jù)庫
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個profile,分別是開發(fā)環(huán)境和生產(chǎn)環(huán)境
資源過濾與變量替換
修改pom.xml ,在build節(jié)點中添加如下配置
<filters>
<filter>src/main/resources/filters/db_${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
這里我們利用filter實現(xiàn)對資源文件(resouces) 過濾
maven filter可利用指定的xxx.properties中對應的key=value對資源文件中的${key}進行替換,最終把你的資源文件中的username=${key}替換成username=value
打包
在pinyougou-dao 工程 執(zhí)行命令:package -P pro , 解壓生成的jar包,觀察db.properties配置文件內容,已經(jīng)替換為生產(chǎn)環(huán)境的值。
在pinyougou-sellergoods-service工程 執(zhí)行命令 pageage ,解壓生成的war包里的pinyougou-dao的jar包,發(fā)現(xiàn)也是生成環(huán)境的值。
測試運行
【1】連接生產(chǎn)數(shù)據(jù)庫
(1)在pinyougou-dao 工程執(zhí)行命令:install -P pro
(2)在pinyougou-sellergoods-service:執(zhí)行命令:tomcat7:run
(3)在pinyougou-shop-web : 執(zhí)行命令:tomcat7:run
【2】連接開發(fā)數(shù)據(jù)庫
(1)在pinyougou-dao 工程執(zhí)行命令:install -P dev (或 install )
(2)在pinyougou-sellergoods-service:執(zhí)行命令:tomcat7:run
(3)在pinyougou-shop-web : 執(zhí)行命令:tomcat7:run
切換注冊中心連接配置
集中配置注冊中心地址
在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}"/>
所有的服務工程與web工程都要依賴pinyougou-common . 并刪除每個工程中關于注冊中心地址的配置
安裝pinyougou-common到本地倉庫,然后測試運行。
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