目标
通过 Maven 的 filters 机制对不同环境(开发、预发布、生产)应用不同的配置信息
步骤
1. 首先需要配置 profile 信息,在不同的 profile 中指定变量 “env”为不同的值
<profiles> <!-- 开发/测试环境,默认激活 --> <profile> <id>debug</id> <properties> <env>debug</env> </properties> <activation> <activeByDefault>true</activeByDefault><!--默认启用的是debug环境配置--> </activation> </profile> <!-- 预发布环境 --> <profile> <id>staging</id> <properties> <env>staging</env> </properties> </profile> <!-- 生产环境 --> <profile> <id>online</id> <properties> <env>online</env> </properties> </profile> </profiles>
2. 生成不同环境的配置文件
在 src/main/filters/ 目录下分别创建三个配置文件
filters.debug.properties
filters.staging.properties
filters.online.properties
配置文件中以 key=value 的形式配置一些参数信息,如:
database.driverClassName=com.mysql.jdbc.Driver
database.url=jdbc:mysql://127.0.0.1:8066/testdb?createDatabaseIfNotExist=true&useUnicode=true
database.userName=username_for_debug
database.password=password_for_debug
3. 配置 Maven 编译时的过滤规则
在工程的 pom.xml 中添加如下配置信息
<build> <filters> <filter>src/main/filters/filters.${env}.properties</filter> </filters> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build>
4. 在资源文件中引用 filters 文件中配置的参数
这里以在 spring 配置文件中的使用举例说明
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${database.driverClassName}"/> <property name="jdbcUrl" value="${database.url}"/> <property name="user" value="${database.userName}"/> <property name="password" value="${database.password}"/> 。。。 </bean>
5.编译工程
我们在编译的时候需要指定 profile 信息,以便 Maven 找到对应的 filters 文件进行过滤。具体的编译命令如下,最后一个参数指定了编译的 profile 是 debug:
mvn clean package -pl com.bibithink.fooservice -am -Dmaven.test.skip -Pdebug