基于maven的profile实现动态选择配置文件

时间:2022-01-18 03:23:10

需求

根据选择不同的部署环境自动替换相关配置变量,如连接的数据库等。

最终效果概览

  • 部署环境分为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概念不熟悉时仍然能正常运行项目。

基于maven的profile实现动态选择配置文件