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包(重复加载)的主要内容,如果未能解决你的问题,请参考以下文章