记录一下springMVC项目的多环境的切换。基于springprofile。
一 简单实现
1 首先将配置文件进行分离,分成development(本地环境)、test(测试环境)、production(正式环境)
配置文件目录如下
common目录用来存放一些每个环境下都一样的配置文件
2 配置spring和springmvc配置文件最下面配置如下beans
<!-- 开发环境配置文件 -->
<beans profile="development">
<context:property-placeholder
location="classpath*:config_common/*.properties, classpath*:config_development/*.properties"/>
</beans>
<!-- 测试环境配置文件 -->
<beans profile="test">
<context:property-placeholder
location="classpath*:config_common/*.properties, classpath*:config_test/*.properties"/>
</beans>
<!-- 生产环境配置文件 -->
<beans profile="production">
<context:property-placeholder
location="classpath*:config_common/*.properties, classpath*:config_production/*.properties"/>
</beans>
3 配置web.xml
<!-- 多环境配置 在上下文context-param中设置profile.default的默认值 -->
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>production</param-value>
</context-param>
<!-- 多环境配置 在上下文context-param中设置profile.active的默认值 -->
<!-- 设置active后default失效,web启动时会加载对应的环境信息 -->
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>test</param-value>
</context-param>
这样启动的时候就可以按照切换spring.profiles.active的属性值来进行切换了
也有更便捷的方法,通过jvm启动时设置属性spring.profiles.active或者依赖于maven 的profile来打包,可自行百度
二 扩展项目中出现加载配置文件情况
项目中可能会出现这样的情况,比如配置一些上传文件的路径 FTP的信息 以及一些回调接口;这类配置信息不是向数据库配置文件 redis那样在项目启动时加载,而是在类里通过ResourceBundle 或是ClassLoder加载
1.写个listener实现 ServletContextListener接口
package cn.jeeweb.core.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* @ClassName:myContextListener
* @Description:获取webxml配置的环境用于PropertiesUtil工具类中动态导入.properties文件
* @Created by wenbin.li on 2018/10/18
*/
public class ProfileContextListener implements ServletContextListener {
public static String profile;
@Override
public void contextInitialized(ServletContextEvent sce) {
profile = sce.getServletContext().getInitParameter("spring.profiles.active");
if (profile == null || profile.equals("")) {
profile = sce.getServletContext().getInitParameter("spring.profiles.default");
}
profile = "config_" + profile + "/";
//动态改变log4j的配置文件
// String log4jConfigLocation = sce.getServletContext().getInitParameter("log4jConfigLocation");
// sce.getServletContext().setInitParameter("log4jConfigLocation", "classpath:"+profile + "log4j.properties");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
2.修改web.xml
<!--多环境配置 监听器-->
<listener>
<listener-class>cn.jeeweb.core.listener.ProfileContextListener</listener-class>
</listener>
3.在加载配置文件时判断一下不是common下面的配置文件 就直接通过listener里的静态变量profile拼接路径获取就行
版权声明:本文为liwb94原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。