TOMCAT加载两次war包(重复加载)

Posted tangquanbin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TOMCAT加载两次war包(重复加载)相关的知识,希望对你有一定的参考价值。

一、问题描述
  项目中通过配置Context节点docBase,使docBase指向项目的绝对路径,可以直接通过IP加端口访问,今日发现意外bug,项目中某个功能奇数次执行成功,偶数次执行失败。
二、问题排查
  这种现象应该是两次使用的为不同的对象,通过debug确认问题。但是本来是单例模式实现的实例,调用的时候却不是同一个实例,经过排查发现是Tomcat加载war包两次导致的。
三、解决办法
  修改Tomcat的/conf/server.xml文件
  1、将Host标签中的appBase置为空,在webapps同级目录创建app目录,将war放入,Context的docBase指向这个绝对路径,注意别放在webapps下,如下配置:

      <Host name="localhost"  appBase=""
            unpackWARs="true" autoDeploy="true">
	     <!-- 这里我的war包是web.war -->		
	    <Context docBase="/home/opt/apache-tomcat-8.0.35-web/app/web" path="" reloadable="true"></Context>
		
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />
	  
      </Host>

  2、在HOST标签中deployIgnore=".*web.*",其他不做修改。

<HOST deployIgnore=".*web.*">
 <Context docBase="/home/opt/apache-tomcat-8.0.35-web/webapps/web" path="" reloadable="true"></Context>

  







以上是关于TOMCAT加载两次war包(重复加载)的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot项目改成Tomcat容器加载(打war包)

Tomcat启动时项目重复加载,导致资源初始化两次的问题

tomcat加载两次项目,事务初始化多次

怎么将jar包发布到tomcat

tomcat下部署项目的流程和遇到的问题笔记

Tomcat启动时项目重复加载的问题