关于web版不同环境切换配置的开发,写的不好的地方欢迎斧正。
1.配置环境变量作为切换的标志。(看个人,你也可以放在配置文件中)
可以打开cmd,输入set查看环境变量是否生效。我是重启完才生效的。
1.1linux环境配置可通过命令配置:
vi /etc/profile
最下方加上:export name = zhangsan;
按ESC 输入wq
输⼊命令 source /etc/profile 刷新刚刚修改过的环境
Web启动初始化配置
<!-- 配置文件初始化/刷新 mapping的url可用来刷新配置文件信息->
<servlet>
<servlet-name>initServlet</servlet-name>
<servlet-class>com....StartUpServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>initServlet</servlet-name>
<url-pattern>/servlet/refreshContextConfig</url-pattern>
</servlet-mapping>
启动时初始化配置,propersUtil是我自己编写的获取方法
getEnvPath() 根据参数去获取不同的配置文件到静态的Properties变量里
自定义刷新部分,通过url可在更改配置文件后实时刷新运行时的全局配置
配置不同的配置文件
#test测试环境 SVC_URL=http://233.233.233.233:5234/huafengcai/huafengcai #local测试环境 SVC_URL=http://255.255.255.255:5434/huafengcai/huafengcai
代码使用时获取全局配置的方式:
String url = PropertiesUtil.SERVICEURL_PROP.getProperty("SVC_URL");
详细代码
StartUpServlet.java
package com.n...utils;
import org.apache.log4j.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StartUpServlet extends HttpServlet {
public static Logger logger = Logger.getLogger(StartUpServlet.class);
//初始化全局配置变量
public void init() {
CommonUtil commonUtil = new CommonUtil();
//获取环境变量值。
String envName = commonUtil.getEnvByName("FILE_TEST_NAME");
PropertiesUtil.getEnvPath(envName);
}
public void destroy() {
}
//请求刷新全局配置变量
public void doGet(HttpServletRequest request, HttpServletResponse response) {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response){
String msg;
CommonUtil commonUtil = new CommonUtil();
//获取环境变量值。
String envName = commonUtil.getEnvByName("FILE_TEST_NAME");
msg = PropertiesUtil.getEnvPath(envName);
if("success".equals(msg)){
msg = "刷新全局配置变量成功";
}else{
msg = "刷新全局配置变量失败";
}
try{
request.setAttribute("msg",msg);
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/flashSafeFilter.jsp"); //定向的页⾯
rd.forward(request, response);
}catch(Exception e){
logger.info("刷新全局配置变量请求结果页面失败\n" + e);
}
//不重跳转jsp,直接输出html界面
// //设置HTTP响应的正文的MIME类型及字符编码
// response.setContentType("text/html;charset=UTF-8");
// /*输出HTML文档*/
// PrintWriter out=response.getWriter();
// out.println("<html><head><title>HelloServlet</title><head>");
// out.println("<body>");
// out.println(msg);
// out.println("</body></html>");
// System.out.println("before close():"+response.isCommitted());
// out.close();
// System.out.println("before close():"+response.isCommitted());
}
}
PropertiesUtil.java
package com.newland.bi.sys.utils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class PropertiesUtil {
public static Logger logger = Logger.getLogger(PropertiesUtil.class);
public static Properties FILEPATH_PROP;
public static Properties SERVICEURL_PROP;
public static String getEnvPath(String fileSuffixName) {
SERVICEURL_PROP = new Properties();
FILEPATH_PROP = new Properties();
String result = "success";
//环境变量参数为空则使用默认全局配置
if(StringUtils.isEmpty(fileSuffixName)){
fileSuffixName = "";
}else{
fileSuffixName = "-" + fileSuffixName;
}
try (InputStream filePath = PropertiesUtil.class.getResourceAsStream("/file-path" + fileSuffixName + ".properties");
InputStream serviceUrl = PropertiesUtil.class.getResourceAsStream("/service-url-conf" + fileSuffixName + ".properties");){
FILEPATH_PROP.load(filePath);
SERVICEURL_PROP.load(serviceUrl);
} catch (Exception e) {
result = "fail";
logger.info("获取配置文件失败\n" + e);
}
return result;
}
}