本地、測試、開發、產品等不同環境文件配置
現象
如果在開發時進行一些數據庫測試,希望鏈接到一個測試的數據庫,以避免對開發數據庫的影響。
開發時的某些配置比如log4j日志的級別,和生產環境又有所區別。
各種此類的需求,讓我希望有一個簡單的切換開發環境的好辦法。
解決
現在spring3.1也給我們帶來了profile,可以方便快速的切換環境。
使用也是非常方便。只要在applicationContext.xml中添加下邊的內容,就可以了
<!-- 開發環境配置文件 --> <beans profile="test"> <context:property-placeholder location="/WEB-INF/test-orm.properties" /> </beans> <!-- 本地環境配置文件 --> <beans profile="local"> <context:property-placeholder location="/WEB-INF/local-orm.properties" /> </beans>
profile的定義一定要在文檔的最下邊,否則會有異常。整個xml的結構大概是這樣
<beans xmlns="..." ...> <bean id="dataSource" ... /> <bean ... /> <beans profile="..."> <bean ...> </beans> </beans>
激活 profile
spring 為我們提供了大量的激活 profile 的方法,可以通過代碼來激活,也可以通過系統環境變量、JVM參數、servlet上下文參數來定義 spring.profiles.active 參數激活 profile,這里我們通過定義 JVM 參數實現。
1、ENV方式:
ConfigurableEnvironment.setActiveProfiles("test")
- 1
- 1
2、JVM參數方式:
tomcat 中 catalina.bat(.sh中不用“set”) 添加JAVA_OPS。通過設置active選擇不同配置文件
set JAVA_OPTS="-Dspring.profiles.active=test"
eclipse 中啟動tomcat。項目右鍵 run as –> run configuration–>Arguments–> VM arguments中添加。local配置文件不必上傳git追蹤管理
-Dspring.profiles.active="local"
- 1
3、web.xml方式:
<init-param> <param-name>spring.profiles.active</param-name> <param-value>production</param-value> </init-param>
4、標注方式(junit單元測試非常實用):
@ActiveProfiles({"unittest","productprofile"})
