Spring3.1+自定义环境配置

今天老大让把项目测试环境,开发环境,生成环境配置一下,方便数据源切换,很惊喜的找到了spring3.1的profile,使用这个标签太方便了。java

Spring 3.1的功能,之后就不用为了区分Test, Dev, Production环境,搞几个只有细微区别的application.xml, application-test.xml及引用它们的web.xml了。

首先,将applicationContext.xml中的namespace从3.0升级到3.1.xsd, 而后就能够在文件末尾加入不一样环境的定义,好比不一样的dataSource
web

Xml代码 spring

<beans profile="test">sql

<jdbc:embedded-database id="dataSource">app

<jdbc:script location="classpath:com/bank/config/sql/schema.sql"/>eclipse

</jdbc:embedded-database>单元测试

</beans>测试


<beans profile="production">spa

<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/datasource"/>orm

</beans>

2.在web.xml里,你须要定义使用的profile,最聪明的作法是定义成context-param,注意这里定义的是default值,在非生产环境,能够用系统变量"spring.profiles.active"进行覆盖。

Xml代码 

<context-param>

<param-name>spring.profiles.default</param-name>

<param-value>production</param-value>

</context-param>

 若是须要在eclipse设置development环境,在

Run As --》Run Configurations... --》Environment 设置变量:

spring.profiles.active = development


3.在其余地方进行覆盖

3.1 在development和functional test启动Jetty前设置系统变量

Java代码 

System.setProperty("spring.profiles.active", "development");

server.start()


3.2 在用到ApplicationContext的单元测试用例中,用 @ActiveProfiles定义

Java代码 

@ContextConfiguration(locations = { "/applicationContext.xml" })

@ActiveProfiles("test")

public class AccountDaoTest extends SpringTxTestCase {

}

演示了production,development,test,functional三个环境, 你们能够根据实际状况组合本身的环境管理。另外能够与Spring的properties文件加载时可顺位覆盖的特性(放一些不在版本管理中的xx.local.properties文件),更好的支持本地开发环境。

相关文章
相关标签/搜索