在项目开发过程中,我们经常遇到这样的问题,就是我们的配置项会因为环境的不同,配置项文件的内容也不同。
举个简单的例子吧。
数据库的连接,我们在不同的环境下,使用的数据库一般都是不同的,开发环境使用开发数据库,测试环境使用测试数据库,线上环境使用生产数据库。
(感叹下:淘宝数据库使用的是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作为你的配置项文件。
是不是灵活多啦?