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> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步