如何使用spring.profiles.active 来无缝的切换正式环境和测试环境的配置。

我们的工程一般在会跑在正式环境、测试环境上,当打包或者运行的时候,切换数据库信息可能会是很麻烦的问题。配置方式:1、在spring配置文件中配置两种环境信息<beans profile="de...

spring里的配置读取 一般我们都用properties记录。但是就碰到,正式环境和测试环境的配置文件怎么自动切换。而不需要我们去修改什么配置,毕竟配置不停地改增加人工成本已经出错率很高。

惭愧的很 我也是今天才知道这个方法的。

我们可以定义第一步里的配置 写好两个环境。

然后容器启动的时候会根据第二步中设定的参数(二选一,建议第二个,毕竟很少有人去修改catalina.sh)来选择调用哪一个。

配置方式:

一、在spring配置文件中配置两种环境信息(把我们的功能Bean 放在一个拥有profile属性里的Beans里)

<beans profile="dev">  
     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	    <property name="locations">
			<list>
				<value>classpath:configure-test.properties</value>	
			</list>
	     </property>		
	</bean>  
</beans>  
<beans profile="prd">  
     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
	    <property name="locations">
			<list>
				<value>classpath:configure.properties</value>	
			</list>
	     </property>		
	</bean>  
</beans>


这个配置一定要单独放一个spring文件,然后在applicationContext.xml(或者其他的主入口文件)里import进来,如果你混淆做,就会报错:

发现了以元素 'bean' 开头的无效内容。应以 '{"http://www.springframework.org/schema/beans:beans}


二,环境配置用于容器区分用哪个profile

1) 在web.xml中配置使用哪种环境信息,tomcat启动的时候自动去加载对应的环境信息

<context-param>  
        <param-name>spring.profiles.active</param-name>  
        <param-value>dev</param-value>  
</context-param>

2) 代码激活

ConfigurableEnvironment.setActiveProfiles("dev")

3) tomcat启动参数

tomcat 中 catalina.bat(.sh中不用“set”) 添加JAVA_OPS。通过设置active选择不同配置文件

JAVA_OPTS="-Xms1g -Xmx2g -Xss256k -Dspring.profiles.active=pre"


完整的如:

#!/bin/sh
## java env
export JAVA_HOME=/usr/java/jdk1.8.0_131
export JRE_HOME=$JAVA_HOME/jre

## service name
APP_NAME=cmessagecenter

SERVICE_DIR=/opt/service/$APP_NAME
SERVICE_NAME=omp_$APP_NAME
JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid

cd $SERVICE_DIR

case "$1" in

    start)
       nohup $JAVA_HOME/bin/java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=11111,suspend=n  -Xms3g -Xmx5g -Ddubbo.shutdown.hook=true -Dspring.profiles.active="dev" -Ddubbo.shutdown.hook=true    -jar $JAR_NAME >/dev/null 2>&1 &
        echo $! > $SERVICE_DIR/$PID
        echo "=== start $SERVICE_NAME"
        ;;

    stop)
        kill `cat $SERVICE_DIR/$PID`
        rm -rf $SERVICE_DIR/$PID
        echo "=== stop $SERVICE_NAME"

        sleep 5
		##
		## edu-service-aa.jar
		## edu-service-aa-bb.jar
        P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
        if [ "$P_ID" == "" ]; then
            echo "=== $SERVICE_NAME process not exists or stop success"
        else
            echo "=== $SERVICE_NAME process pid is:$P_ID"
            echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"
            kill -9 $P_ID
        fi
        ;;

    restart)
        $0 stop
        sleep 2
        $0 start
        echo "=== restart $SERVICE_NAME"
        ;;

    *)
        ## restart
        $0 stop
        sleep 2
        $0 start
        ;;

esac
exit 0

中的

-Dspring.profiles.active="dev"

4) 如果是在myeclipse或其他ide里 我们也可以设置JVM的启动参数

QQ截图20171026113812.jpg

5) 如果测试用例里使用

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
@ActiveProfiles("dev")
public class HelloJavaTest {
    
}



本文原创:

转载请标注出处:http://www.hellojava.com/article/edit/162




  • 发表于 2017-10-25 19:03
  • 阅读 ( 2976 )
  • 分类:J2EE框架

条评论

请先 登录 后评论
不写代码的码农
三叔

422 篇文章

作家榜 »

  1. 小编 文章
返回顶部
部分文章转自于网络,若有侵权请联系我们删除