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的启动参数
5) 如果测试用例里使用
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:applicationContext.xml"}) @ActiveProfiles("dev") public class HelloJavaTest { }
本文原创:
转载请标注出处:http://www.hellojava.com/article/edit/162