借助Maven为项目划分development,test,production环境
很早学习rails的时候,rails在服务器启动的时候,通过参数可以切换不同运行环境。也许spring从rails吸取了这样的功能,从spring3.1就提供了profile功能,方便我们为不同的profile使用不同的bean。能够想到的应用场景就是数据源的配置,在productionprofile中,可能通过jndi获取数据源,而在开发环境中配置jndi比较费事,使用durid配置数据源,项目发布的时候需要修改数据源的配置,比较麻烦,如果忘记修改就更惨了。为了解决这样相关的问题,这里使用mavenprofile和mavenresourceplugin为项目提供profile功能。
springprofile实例:
<beans profile="development"> <bean id="dataSource-mysql" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url"> <value>jdbc:mysql://192.168.1.100/druid-test</value> </property> <property name="username"> <value>admin</value> </property> <property name="password"> <value>adminpassword</value> </property> <property name="initialSize"> <value>1</value> </property> <property name="maxActive"> <value>20</value> </property> </bean> </beans> <beans profile="production"> <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/datasource"/> </beans>
这里我主要解决项目中三个应用场景:
1:资源文件配置,每个环境下的属性值可能不同
2:日志文件配置,开发环境下日志只需要在控制台显示,而productionprofile中是需要打到日志文件中。
3:使用maven切换springprofile。
完成上述功能,最主要是在pom.xml文件中添加如下一段配置:
<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources>
这样maven搜索src/main/resources下的所有文件,替换有类似这样变量${profiles.active}的值,其中profiles.active中的值是配置pom.xml文件,如下:
<profiles> <profile> <id>development</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <profiles.active>development</profiles.active> </properties> </profile> <profile> <id>test</id> <properties> <profiles.active>test</profiles.active> </properties> </profile> <profile> <id>production</id> <properties> <profiles.active>production</profiles.active> </properties> </profile> </profiles>
上面配置三种profile,默认激活developmentprofile。
为了解决资源文件的问题,我们提供三个资源文件,命名如下。logback-和.xml中间的值为profiles.active的值。
logback-development.xml logback-production.xml logback-test.xml
springproperty-placeholder引用资源文件的方式如下。
<context:property-placeholder location="classpath:/META-INF/res/resource-${profiles.active}.properties" />
为了解决日志文件的问题,这里使用了logback,和资源文件一样提供四个配置文件。
logback-development.xml logback-production.xml logback-test.xml
在classpath下添加logback.xml。logback默认加载classpath下的logback.xml文件,配置内容如下:
<configuration> <include resource="/META-INF/logback/logback-${profiles.active}.xml"/> </configuration>
激活springprofile,只要在web.xml中添加如下配置:
<context-param> <param-name>spring.profiles.active</param-name> <param-value>${profiles.active}</param-value> </context-param>