读书人

用maven的profile控制不同环境上的配置

发布时间: 2012-11-22 00:16:41 作者: rapoo

用maven的profile控制不同环境下的配置项目

在项目开发过程中,我们经常遇到这样的问题,就是我们的配置项会因为环境的不同,配置项文件的内容也不同。

举个简单的例子吧。

数据库的连接,我们在不同的环境下,使用的数据库一般都是不同的,开发环境使用开发数据库,测试环境使用测试数据库,线上环境使用生产数据库。

(感叹下:淘宝数据库使用的是TDDL动态数据源,并且有SCM配置中心进行配置项的管理,所以开发者无需关心这类问题)

那么,在没有配置中心的情况下,我们怎么管理我们的配置项呢?

其实,maven已经提供了这方面的,支持。这个就是profile。你可以按照如下方式配置你的pom文件,可以做到简单的配置文件区分。(假设开发者机器是windows,使用的配置项文件是dev.properties,生产机使用的是linux,使用的配置项文件是pro.properties)

POM部分配置内容:

<profiles>

? ? ? ? <profile>

? ? ? ? ? ? <id>linux</id>

? ? ? ? ? ? <activation>

? ? ? ? ? ? ? ? <os>

? ? ? ? ? ? ? ? ? ? <family>linux</family>

? ? ? ? ? ? ? ? </os>

? ? ? ? ? ? </activation>

? ? ? ? ? ? <properties>

? ? ? ? ? ? ? ? <antx.properties.file>

? ? ? ? ? ? ? ? ? ? ?${basedir}/src/main/webapp/META-INF/pro.properties

? ? ? ? ? ? ? ? </antx.properties.file>

? ? ? ? ? ? </properties>

? ? ? ? </profile>

? ? ? ? <profile>

? ? ? ? ? ? <id>windows</id>

? ? ? ? ? ? <activation>

? ? ? ? ? ? ? ? <os>

? ? ? ? ? ? ? ? ? ? <family>windows</family>

? ? ? ? ? ? ? ? </os>

? ? ? ? ? ? </activation>

? ? ? ? ? ? <properties>

? ? ? ? ? ? ? ? <antx.properties.file>

? ? ? ? ? ? ? ? ? ? ?{basedir}/src/main/webapp/META-INF/dev.properties

? ? ? ? ? ? ? ? ?</antx.properties.file>

? ? ? ? ? ? </properties>

? ? ? ? </profile>

? ? </profiles>

?

这是最简单的处理方式,根据操作系统不同来选择不同的文件作为你的配置项。

但如果你的环境还分开发环境(dev)、测试环境(test)、预发布环境(rea)、生成环境(pro)呢,仅仅靠操作系统是无法区分开的。

?

这时候 ??mvn package P??${profileId} ??可以帮到你。

?

POM文件配置如下:

?

<build>部分:

?

<build>

? ? ? ? .....此次省略部分配置内容...

? ? ? ? <filters>

? ? ? ? ? ? <filter>{basedir}/src/main/webapp/META-INF/{env}.properties?</filter>

? ? ? ? </filters>

? ? ? ??.....此次省略部分配置内容...

</build>

?

? ? ?<profiles>部分:

?

? <profiles>

? ? ? ?<!-- 开发环境,默认激活 -->

? ? ? ?<profile>

? ? ? ? ? ?<id>dev</id>

? ? ? ? ? ?<properties>

? ? ? ? ? ? ? <env>dev</env>

? ? ? ? ? ?</properties>

? ? ? ? ? ?<activation>

? ? ? ? ? ? ? <activeByDefault>true</activeByDefault><!--默认启用的是dev环境配置-->

? ? ? ? ? ?</activation>

? ? ? ?</profile>

? ? ? ?<!-- 测试环境 -->

? ? ? ?<profile>

? ? ? ? ? ?<id>test</id>

? ? ? ? ? ?<properties>

? ? ? ? ? ? ? <env>test</env>

? ? ? ? ? ?</properties>

? ? ? ?</profile>

? ? ? ?<!-- 预发布环境 -->

? ? ? ?<profile>

? ? ? ? ? ?<id>rea</id>

? ? ? ? ? ?<properties>

? ? ? ? ? ? ? <env>rea</env>

? ? ? ? ? ?</properties>

? ? ? ?</profile>

? ? ? ?<!-- 生产环境 -->

? ? ? ?<profile>

? ? ? ? ? ?<id>pro</id>

? ? ? ? ? ?<properties>

? ? ? ? ? ? ? <env>pro</env>

? ? ? ? ? ?</properties>

? ? ? ?</profile>

? </profiles>

?

这样,当执行??mvn package P??test 将会使用test.properties作为你的配置项文件,

执行mvn package P??pro?将会使用pro.properties作为你的配置项文件。

是不是灵活多啦?

?

读书人网 >互联网

热点推荐