基於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
- dev
實現步驟
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概念不熟悉時仍然能正常執行專案。