使用maven,实现程序在不同环境的切换
前言:在开发中我们会遇到这样的情况,开发环境是对应的数据库的地址是A,但是部署到测试环境的时候是B,真正放到线上的时候是C,
运行的环境一旦切换就要修改配置的参数,这样会造成开发不必要的麻烦。
所以,一般会针对每一个环境写一套配置参数,在构建项目的时候根据对应的环境来引入配置文件。
使用maven提供的 filter,profiles 这两个功能来解决上述的问题。
1,首先,我们创建一个目录来存放对应的配置文件,如果对应的每一个环境会有多个配置文件的换,建议分多个目录。
filter-dev.properties
fitler-test.properties
filter-produce.properties
上面的三个文件,分别对应到开发,测试,生产的三个环境。
2,在pom.xml文件中定义三种环境的名称
<profiles>
<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<active.profile>dev</active.profile>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<active.profile>test</active.profile>
</properties>
</profile>
<profile>
<id>product</id>
<properties>
<active.profile>product</active.profile>
</properties>
</profile>
</profiles>
上述的配置,通过
<activation>
<activeByDefault>true</activeByDefault>
</activation>
来定义默认使用的Profile为dev。
3,在pom.xml文件对构建的时候对应的配置文件进行拦截过滤。
<build>
<filters>
<filter>config_fillters/filter-${active.profile}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
表示对应所有的src/main/resources下面的所有的配置文件就行过滤。
在这一步骤特别要注意的是对应的文件夹目录,和文件的名称一定不能写错。
总结:通过上面的三个步骤就可以实现不同运行环境的切换了。假如我们在applicationContesx.xml文件中定义的参数就可以这样来定义。.
<bean id="jedisPool" class="com.water.core.cache.ShardedJedisPoolFactory">
<property name="hostAndPorts" value="@redis.address@"/>
<!--<property name="hostAndPorts" value="127.0.0.1:6379"/>-->
</bean>
就会根据你引入的配置文件中找到键 redis.address 对应的值了。