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文件),更好的支持本地開發環境。

相關文章
相關標籤/搜索