一點一點學maven(13)--利用maven的filter和profile實現不同環境使用不同的配製
在我們平常的java開發中,會經常使用到很多配製檔案(xxx.properties,xxx.xml),而當我們在本地開發(dev),測試環境測試(test),線上生產使用(product)時,需要不停的去修改這些配製檔案,次數一多,相當麻煩。現在,利用maven的filter和profile功能,我們可實現在編譯階段簡單的指定一個引數就能切換配製,提高效率,還不容易出錯,詳解如下。
一,原理:
1、利用filter實現對資原始檔(resouces)過濾
maven filter可利用指定的xxx.properties中對應的key=value對資原始檔中的${key}
進行替換,最終把你的資原始檔中的username=${key}
2、利用profile來切換環境
maven profile可使用作業系統資訊,jdk資訊,檔案是否存在,屬性值等作為依據,來啟用相應的profile,也可在編譯階段,通過mvn命令加引數 -PprofileId 來手工啟用使用對應的profile
結合filter和profile,我們就可以方便的在不同環境下使用不同的配製
二,配製:
在工程根目錄src/main/resources下新增4個配製檔案:
jdbc-dev.properties – 開發時用
jdbc.url=jdbc:mysql://127.0.0.1/development?useUnicode=true &characterEncoding=utf-8&allowMultiQueries=true
jdbc.username=development
jdbc.password=development123456
jdbc-test.properties – 測試時用
jdbc.url=jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
jdbc.username=test
jdbc.password=test123456
jdbc-production.properties – 生產時用
jdbc.url=jdbc:mysql://127.0.0.1/production?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
jdbc.username=production
jdbc.password=production123456
jdbc.properties – 模版檔案,被專案引用
jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}
工程根目錄下的pom檔案中新增下面的設定:
<build>
<resources>
<!-- 先指定 src/main/resources下所有檔案及資料夾為資原始檔 -->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
<!-- 設定對jdbc.properties進行過慮,即這些檔案中的${key}會被替換掉為真正的值 -->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>jdbc.properties</include>
</includes>
<!-- 啟用過濾器的過濾功能 -->
<filtering>true</filtering>
</resource>
</resources>
<!-- 配置過濾器, -->
<filters>
<filter>src/main/resources/jdbc-${deploy.env}.properties</filter>
</filters>
</build>
<!-- 個性化配置,實現多環境部署 -->
<profiles>
<!-- 定義profile,定製不同的環境配置 -->
<profile>
<id>development</id>
<!-- 預設開發環境被啟用 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<deploy.env>development</deploy.env>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<deploy.env>test</deploy.env>
</properties>
</profile>
<profile>
<id>production</id>
<properties>
<deploy.env>production</deploy.env>
</properties>
</profile>
</profiles>
三,使用:
開發環境:
filter是在maven的compile階段執行過慮替換的,所以只要觸發了編譯動作即可,如果像以前一樣正常使用發現沒有替換,則手工clean一下工程(eclipse -> Project -> Clean)【這裡你應該要安裝上maven外掛,因為替換是maven做的,不是eclipse做的,所以這裡的clean應當是觸發了maven的compile】,然後在Tomcat上也右鍵 -> Clean一下即可,然後你去tomcat目錄下會發現你的工程的資原始檔裡面的${key}
被替換為對應的config-xx的值了
如果上面還不行,那麼就使用maven外掛或者手工控制檯下打maven編譯命令吧
因為pom.xml中設定了dev為預設啟用的,所以預設會把config-dev拿來進行替換${key}
測試環境
手工編譯,打包:maven clean install -Ptest -- 啟用id="test"的profile
生產環境
手工編譯,打包:maven clean install -Pproduct -- 啟用id="product"的profile