Spring3.1+自定义环境配置 <beans profile="">

本文介绍了如何利用Spring 3.1版本的特性,简化不同环境(如测试、开发、生产)之间的配置差异,通过在applicationContext.xml中定义不同profile的方式,统一管理数据源等关键组件,同时提供了在web.xml中定义default profile及使用系统变量覆盖的方法,以及在单元测试中灵活切换环境实例的实践。此优化策略不仅提升了开发效率,还增强了系统的可维护性和灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

首先,将applicationContext.xml中的namespace从3.0升级到3.1.xsd, 然后就可以在文件末尾加入不同环境的定义,比如不同的dataSource

Xml代码 

<beans profile="test">

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

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

</jdbc:embedded-database>

</beans>


<beans profile="production">

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

</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文件),更好的支持本地开发环境。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值