1. 程式人生 > >一點一點學maven(13)--利用maven的filter和profile實現不同環境使用不同的配製

一點一點學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}

替換成username=value

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