基于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概念不熟悉时仍然能正常运行项目。

posted @ 2017-09-19 14:28 leapMie 阅读(...) 评论(...) 编辑 收藏