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);
	}

}

猜你喜欢

转载自blog.csdn.net/chenjin_chenjin/article/details/85290509