zoukankan      html  css  js  c++  java
  • tomcat配置环境变量

    一直没配过,都是使用免安装的。但今天客户有其他公司的tomcat,只能再

    起一个。但启动时闪退,在tomcat下看不到日志。经查询启动日志跑到原有的另一个tomcat下了,报的是端口冲突。但端口已经改了。经查询发现配置了环境变量指向了原tomcat目录。

    解决办法:

    方法一:再配置一个tomcat环境变量。

    1.配置CATALINA_BASE2和CATALINA_HOME2指向tomcat目录,如下:

    2.打开catalina.bat和startup.bat文件,将所有的CATALINA_BASE替换成CATALINA_BASE2,将所有的CATALINA_HOME替换成CATALINA_HOME2。重启即可。

    注意:有说将bin下所有bat中的CATALINA_BASE和CATALINA_HOME都全部替换,博主认为没必要

    方法二:只做方法一的第2步,省略第1步

     方法三:在catalina.bat和startup.bat文件里第一行添加

    set "CATALINA_HOME=D:apache-tomcat-7.0.69"
    set "CATALINA_BASE=D:apache-tomcat-7.0.69"

    如下

    原理:参考https://blog.csdn.net/kevinwuwenboa/article/details/52976424可知

    tomcat容器启动时创建bootstrap对象调用init方法,设置catalinahome和catalinabase,

    public void init()  
            throws Exception  
        {  
      
            // Set Catalina path  
            // 设置catalina_home属性,tomcat启动脚本里有通过-Dcatalina.home设置  
            setCatalinaHome();  
            // 设置catalina_base属性,运行多实例的时候该目录与catalina_home不同  
            setCatalinaBase();  
      
            // 初始化classloader,读取conf/catalina.properties,根据指定的repository创建classloader  
            // 有三个classloader   分别是common、catalina、shared,tomcat6中三个相同  
            initClassLoaders();  
            // 设置当前线程的classloader  
            Thread.currentThread().setContextClassLoader(catalinaLoader);  
            // 待研究  
            SecurityClassLoad.securityClassLoad(catalinaLoader);  
      
            // 以下通过反射调用Catalina中的方法  
            // Load our startup class and call its process() method  
            if (log.isDebugEnabled())  
                log.debug("Loading startup class");  
            Class startupClass =  
                catalinaLoader.loadClass  
                ("org.apache.catalina.startup.Catalina");  
            Object startupInstance = startupClass.newInstance();  
      
            // Set the shared extensions class loader  
            if (log.isDebugEnabled())  
                log.debug("Setting startup class properties");  
            String methodName = "setParentClassLoader";  
            Class paramTypes[] = new Class[1];  
            paramTypes[0] = Class.forName("java.lang.ClassLoader");  
            Object paramValues[] = new Object[1];  
            paramValues[0] = sharedLoader;  
            Method method =  
                startupInstance.getClass().getMethod(methodName, paramTypes);  
            method.invoke(startupInstance, paramValues);  
      
            catalinaDaemon = startupInstance;  
      
        }
    View Code
    -Dcatalina.home和-Dcatalina.base的设置在catalina.bat中完成,因此要更改catalina.bat文件。

    至于startup.bat与方法二,打开startup.bat文件看如下几行代码

    发现处理了的catalina_home的各种情况。

    至于方法三的原理,相当于类中设置了成员变量,就不用公用的了

  • 相关阅读:
    [js对象]JS入门之Date对象
    从Microsoft SqlServer 2005中返回有一定顺序的记录集
    [js对象]JS入门之Global对象
    [JS.IntelliSense]VS2008(Orcas) So Cool
    即插即用插件式框架的程序集处理遐想(TypeFinder)
    [C#3.0体验]Orcas中内置的LinQ,XLinQ[DLinQ]扩展方法
    [ASP.NET入门]页面生命周期
    [IE]IE6&IE7运行于同一个系统中
    [js对象]JS入门之Boolean&Object对象
    RSS(Really Simple Syndication)常用标签
  • 原文地址:https://www.cnblogs.com/yanan7890/p/8954887.html
Copyright © 2011-2022 走看看