自定义Web容器tomcat的差异化配置文件

依靠下面的工具类来完成:

]

package cn.com.mx.gome.suggest.util.envload;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 加载tomcat目录下的文件 实现每台机器的个性化参数配置
 * @author songqinghu
 */

public class EnvConfLoaderUtils {

    private static Logger logger = LoggerFactory.getLogger(EnvConfLoaderUtils.class);

    //设置此工具类为单例模式
    private static EnvConfLoaderUtils envconf =null ;

    private EnvConfLoaderUtils(){
        this.EnvConfLoaderUtils(null,null);//调用可配置构造
    }

    public static EnvConfLoaderUtils getInstance(){
        if(envconf ==null){
            envconf = new EnvConfLoaderUtils();
        }
        return envconf;
    }

    //加载tomcat的配置文件部分

    private final static String ENV_CONF_DIR ="envpath";//tomcat根目录下的目录名称

    private final static String ENV_CONF_FILE = "env.properties";//个性化机器参数的文件
    //根据不同系统 tomcat位置来决定配置目录的位置
    private static String ENV_FILE_DIR = System.getProperty("catalina.base")+File.separator+ENV_CONF_DIR;

    private Map<String, String> envProps = Collections.emptyMap();//读取配置文件产生的键值对列表

    private File envFile = null;//具体的配置文件

    //指定的构造 用于通过系统变量动态设置环境变量的参数---system.getproperties
    private void EnvConfLoaderUtils(String path, String fileName) {
        if(path==null)
            path = ENV_FILE_DIR;
        if(fileName ==null)
            fileName = ENV_CONF_FILE;
        if(System.getProperty("com.gomeplus.envpath")!=null){
            //如果需要进行环境变量的变更可以通过设置环境变来指定一个目录
            path = System.getProperty("com.gomeplus.envpath").trim();
        }
        //设置新文件
        envFile = new File(path+File.separator+fileName);
        reload();
    }

    //加载配置文件到集合中
    private void reload() {
        //判断文件是否存在
        if(!envFile.exists()){
            logger.info("conf {} dosen't exist,trying to create one", envFile);
            //判断父目录存在吗
            if(!envFile.getParentFile().exists()){
                //不存在先创建一个
                envFile.getParentFile().mkdir();
                try {
                    envFile.createNewFile();//创建一个新的文件
                } catch (IOException e) {
                    logger.info("new file is error :{}",e);
                }
            }
        }
        //判断envFile是不是文件 不是就抛出异常
        if(!envFile.isFile()){
            throw new RuntimeException("the env.properties is not file");
        }

        //进行文件的读取 propertis
        logger.info("start loading env properties :"+envFile);
        Properties p ;
        try(InputStream is  = new FileInputStream(envFile)){
            p = new Properties();
            p.load(is);
            HashMap<String, String> envProps = new HashMap<String,String>();
            Enumeration<String> names = (Enumeration<String>) p.propertyNames();
            while(names.hasMoreElements()){
                String key = names.nextElement();
                String value = p.getProperty(key);
                envProps.put(key, value);
            }
            this.envProps = envProps;
        }catch (Exception e) {
          logger.error("",e);
        }

    }

    /**
     *
     * @描述:获取指定的配置信息 指定是否重新加载文件
     * @param key
     * @param reload
     * @return
     * @return String
     * @exception
     * @createTime:2016年5月10日
     * @author: songqinghu
     */
    public String getValue(String key,boolean reload){
        if(reload){
            reload();
        }
        return envProps.get(key);
    }
    /**
     *
     * @描述:获取配置文件读取的信息集合
     * @return
     * @return Map<String,String>
     * @exception
     * @createTime:2016年5月10日
     * @author: songqinghu
     */
    public Map<String,String> getEnvProps(){
        return this.envProps;
    }
}
时间: 2024-11-14 12:27:41

自定义Web容器tomcat的差异化配置文件的相关文章

部署webapp到web容器的三种方式(这里的web容器Tomcat)

*******************************这是看传智播客的学习视频学到的*********************************** 0.首先看看我们的例子** 1.第一种方式: 直接将项目放到webapps目录下即可.   * /hello:项目的访问路径-->虚拟目录 * 简化部署:将项目打成一个war包,再将war包放置到webapps目录下. * war包会自动解压缩 1.1直接把webapp的文件夹复制 1.2把webapp的war包放下面 1.3运行结果

Java Web容器的启动过程

Java web容器的启动与处理请求的过程 1.启动一个web项目的时候,web容器回去读取它的配置文件web.xml,读取<Context-param>结点. 2.容器创建一个servletContext(Servlet上下文),这个web项目的所有部分都将共享这个上下文. 3.容器将<context-param>转换为键值对,并交个ServletContext.因为listener,filter等组件在初始化时会用到这些上下文的信息,所以要先加载. 4.容器创建<list

web服务器、Web中间件和Web容器的区别

web服务器>web中间件>web容器 Tomcat(servlet容器)  是  Tomcat中间件  也是  Tomcat服务器 看了谢公子的csdn文章,让我彻底分清了这三者的区别. 因此我把这篇文章分享于此 : https://blog.csdn.net/qq_36119192/article/details/84501439 原文地址:https://www.cnblogs.com/-chenxs/p/11368017.html

1、Web容器的理解&amp;Tomcat的安装与配置

Web容器的理解 <Java Web开发实战经典——基础篇>一书中对Web容器这一概念阐述得很好,借用其观点对Web容器加以理解: 想要运行一个Java Web的程序,则必须有相应的Web容器支持,因为所有的动态页面的程序代码都要在Web容器中执行,并将最后生成的结果交付给用户使用. 服务器端使用Web服务插件接受客户端的http请求,并对用户请求加以判断,判断其是动态请求还是静态请求.如果是静态请求,则直接通过Web服务器从文件系统中取得相应的文件,并通过http协议返回到客户端浏览器:如果

Tomcat,Jboss,Glassfish等web容器比较选型

概述 Web容器是一种服务调用的规范,J2EE运用了大量的容器和组件技术来构建分层的企业应用.在J2EE规范中,相应的有WEB Container和EJB Container等. Web容器给处于其中的应用程序组件(JSP,SERVLET)提供环境,是的JSP,SERVLET直接与容器中的环境变量打交道,而不必关注其他系统问题. Web容器更多的是与HTTP的请求打交道,而EJB容器不是,它更多的是跟数据库其他服务打交道. Web服务器 Web服务器可以处理HTTP协议,当Web服务器接收到一个

tomcat web容器工作原理

Tomcat的模块结构设计的相当好,而且其Web 容器的性能相当出色.JBoss直接就使用了Tomcat的web容器,WebLogic的早期版本也是使用了Tomcat的代码.Web容器的工作过程在下面的第二个参考文档中的文档已经说得相当清楚,我也就不再重复说了.如果不清楚调用过程,需要先看这个文档.这里分析一下Connector的处理过程.1. 一个简单的Web Server示例这个例子也是从网上找得,不知道原作者,也就不在参考资料中引用了.这个启动服务的主程序.public class Htt

Tomcat Jboss Glassfish 三种常见web容器比较

https://i.cnblogs.com/EditPosts.aspx?postid=7596859 Tomcat Jboss Glassfish 三种常见web容器比较<br>一.缘由: 新公司平台是纯Java架构,有用到Java Web(JSP).Java 业务(EJB).Nginx..Websphere MQ.Mysql这样.大家知道java是跑在容器里的, 这里的业务要用到EJB故选用了Glassfish容器. EJB是什么?EJB是一个服务器端的组件模型,可以部署分布式应用程序.J

Session or Cookie?是否需要用Tomcat等Web容器的Session

Cookie是HTTP协议标准下的存储用户信息的工具,浏览器把用户信息存放到本地的文本文件中. Session是基于Cookie实现的. 2011年4月,武汉群硕面试的时候(实习生),面试官也问过这个问题. 当时只知道Session是基于Cookie的,但是没有想到"不使用Tomcat等Web容器的Session,只使用Cookie也可以实现自己的Session,完成会话管理,而且据说性能更好." 以前的做法: 使用HttpRequestSession保存用户信息,非常方便. 配置一个

【转载】web开发中 web 容器的作用(如tomcat)

我们讲到servlet可以理解服务器端处理数据的java小程序,那么谁来负责管理servlet呢?这时候我们就要用到web容器.它帮助我们管理着servlet等,使我们只需要将重心专注于业务逻辑. 什么是web容器? servlet没有main方法,那我们如何启动一个servlet,如何结束一个servlet,如何寻找一个servlet等等,都受控于另一个java应用,这个应用我们就称之为web容器. 我们最常见的tomcat就是这样一个容器.如果web服务器应用得到一个指向某个servlet的