1. 程式人生 > >基於maven的profile實現動態選擇配置檔案

基於maven的profile實現動態選擇配置檔案

需求

根據選擇不同的部署環境自動替換相關配置變數,如連線的資料庫等。

最終效果概覽

  • 部署環境分為dev和release
  • 工程目錄結構
  myproject
    |-profile
    |   |-dev
    |   |   |-dbconfig.properties
    |   |-release
    |        |-dbconfig.properties
    |-src
    |   |-main
    |       |-java
    |       |-webapp
    |       |-resources
    |           |-dbconfig.properties
    |
-pom.xml
  • 部署時執行命令
    • dev
      mvn clean package -Pdev
    • release
      mvn clean package -Prelease

實現步驟

1. 編輯各環境的變數

按如下結構建立目錄和檔案(各目錄、檔案的名字和路徑均可更改,與下一步的配置對應即可)

  myproject
    |-profile
    |   |-dev
    |   |   |-dbconfig.properties
    |   |-release
    |        |-dbconfig.properties

dev/dbconfig.properties內容如下

jdbc.url=jdbc\:oracle
\:thin\:@111.00.00.111\:1521\:orcl jdbc.username=myproject jdbc.password=myproject_test jdbc.dbType=oracle

release/dbconfig.properties內容如下

jdbc.url=jdbc\:oracle\:thin\:@222.00.00.222\:1521\:orcl
jdbc.username=myproject
jdbc.password=myproject_release
jdbc.dbType=oracle

專案實際訪問的資料庫配置檔案位於myproject/src/main/resources/dbconfig.properties,內容如下

jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}
jdbc.dbType=${jdbc.dbType}

在部署過程中${xxx}將被替換為對應環境的值,變數名稱與dev/dbconfig.properties、release/dbconfig.properties的欄位名對應。

2. pom.xml中配置profile

在pom.xml的<project></project>中新增如下配置

<profiles>
    <profile>
        <!-- 開發環境 -->
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <filters>
                <filter>${basedir}/profile/dev/dbconfig.properties</filter>
            </filters>
        </build>
    </profile>

    <profile>
        <!-- 生產環境 -->
        <id>release</id>
        <build>
            <filters>
                <filter>${basedir}/profile/release/dbconfig.properties</filter>
            </filters>
        </build>
    </profile>
</profiles>

此處新增兩個profile,分別為開發環境的dev和正式環境的release,其中dev環境配置了<activeByDefault>true</activeByDefault>,指定dev為預設配置

3. 啟用過濾資源

pom.xml配置資源時,針對待替換的資源設定<filtering>true</filtering>。本例中配置為src/main/resources下的所有properties檔案都需要檢測替換。

<resources>
    <resource>
        <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
        </includes>
    <filtering>true</filtering>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
    </resource>
</resources>

4. 部署

mvn命令中-P可指定profile
根據配置中profile的id可選擇對應的部署環境,如部署到正式環境時執行如下命令即可完成打包
mvn clean package -Prelease

其他

IDEA中的使用

在idea的Maven Project標籤中可以看到專案配置的profile,如果通過<activeByDefault>true</activeByDefault>指定了預設環境,在專案構建過程將會自動勾選預設的環境,如此可以在其他開發成員對profile概念不熟悉時仍然能正常執行專案。