1. 程式人生 > >spring mvc配置開發環境 測試環境 正式環境

spring mvc配置開發環境 測試環境 正式環境

專案的開發環境和測試生產環境要配置的資料庫,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);
	}

}