spring mvc配置開發環境 測試環境 正式環境
阿新 • • 發佈:2019-01-04
專案的開發環境和測試生產環境要配置的資料庫,redis等等,連線地址都不一樣。這樣在專案部署到測試,生產時總要挨個修改這些配置。通過Spring的profile可以控制在不同的環境在Spring容器中註冊不同的配置,然後用一個總開關控制在什麼環境用什麼配置。
1、修改web.xml
新增
<!-- 環境配置 --> <context-param> <param-name>spring.profiles.active</param-name> <param-value>dev</param-value> </context-param>
引入環境配置檔案
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring-env.xml
</param-value>
</context-param>
匯入配置檔案 :spring-env.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--載入SpringContextUtils到容器--> <bean name="springContextUtils" class="com.hxy.base.utils.SpringContextUtils"/> <beans profile="dev"> <bean id="propertyConfigurer_dev" class="com.hxy.base.utils.SpringPropertiesUtil"> <property name="locations"> <list> <value>classpath:conf/jdbc-dev.properties</value> <value>classpath:conf/cas-dev.properties</value> <value>classpath:conf/redisSentinel.properties</value> <value>classpath:conf/redis-dev.properties</value> <value>classpath:conf/app.properties</value> <value>classpath:conf/baidu.properties</value> <value>classpath:conf/msg.properties</value> </list> </property> </bean> </beans> <beans profile="pro"> <bean id="propertyConfigurer_pro" class="com.hxy.base.utils.SpringPropertiesUtil"> <property name="locations"> <list> <value>classpath:conf/jdbc-pro.properties</value> <value>classpath:conf/cas-pro.properties</value> <value>classpath:conf/redisSentinel.properties</value> <value>classpath:conf/redis-pro.properties</value> <value>classpath:conf/app.properties</value> <value>classpath:conf/baidu.properties</value> <value>classpath:conf/msg.properties</value> </list> </property> </bean> </beans> <beans profile="test"> <bean id="propertyConfigurer_test" class="com.hxy.base.utils.SpringPropertiesUtil"> <property name="locations"> <list> <value>classpath:conf/jdbc-test.properties</value> <value>classpath:conf/cas-test.properties</value> <value>classpath:conf/redisSentinel.properties</value> <value>classpath:conf/redis-test.properties</value> <value>classpath:conf/app.properties</value> <value>classpath:conf/baidu.properties</value> <value>classpath:conf/msg.properties</value> </list> </property> </bean> </beans> </beans>
SpringContextUtils類:
@Component public class SpringContextUtils implements ApplicationContextAware { public static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContextUtils.applicationContext = applicationContext; } public static Object getBean(String name) { return applicationContext.getBean(name); } /** * 從靜態變數applicationContext中取得Bean, 自動轉型為所賦值物件的型別. */ public static <T> T getBean(Class<T> requiredType) { assertContextInjected(); return applicationContext.getBean(requiredType); } /** * 檢查ApplicationContext不為空. */ private static void assertContextInjected() { Validate.validState(applicationContext != null, "applicaitonContext屬性未注入, 請在applicationContext.xml中定義SpringContextHolder."); } public static <T> T getBean(String name, Class<T> requiredType) { return applicationContext.getBean(name, requiredType); } public static boolean containsBean(String name) { return applicationContext.containsBean(name); } public static boolean isSingleton(String name) { return applicationContext.isSingleton(name); } public static Class<? extends Object> getType(String name) { return applicationContext.getType(name); } }