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>

  

原文地址:https://www.cnblogs.com/tangquanbin/p/10290410.html

时间: 2024-07-30 14:47:21

TOMCAT加载两次war包(重复加载)的相关文章

Tomcat加载两次问题

前提介绍: 1.某个应用Dragon放置路径:/opt/apache-tomcat-7.0.47/webapps/Dragon 2.Tomcat的server.xml部分配置信息如下: <Context path="" reloadable="false" docBase="Dragon"/> 问题:此时tomcat启动时发现控制台打印两次信息. 问题原因: 因为Dragon应用本来就放在Tomat的默认webapp目录下(tomca

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

1.  项目重复启动    appBase设置和docBase设为一样,不写appBase默认也是webapps 2.  事务 通常会这样配置 代码这样写 但jeesite中,在启动时基本上会扫描所有的service   这会有个冲突在配置文件中开启事务时初始化了一次定时任务,在扫描service时又初始化了一次,在执行定时任务时就会同时执行两个task 如果人品不好(比如我),项目加载两次,事务初始化两次,那么每次执行就会有4个task Jeesite中定义事务只需要写一个task类,配置文件

Tomcat启动后加载两次servlet的问题

前提: 1.存在某个应用:hello 2.该应用存放路径:D:\apache-tomcat-5.5.17\webapps\hello 3.Tomcat的server.xml部分配置信息如下: Java代码 ...  <Context path="" reloadable="true" docBase="hello"/>  ...  ...  <Context path="" reloadable="

javaEE:day2-servlet生命周期、提交解决中文乱码、tomcat加载jar包或类文件的顺序

servlet生命周期 生命周期简介: servlet在服务器第一次被请求的时候new出来,并初始化(即init())再调用service方法.这个实在服务器中new出来,然后用HashMap加的,与客户端无关.客户端之后访问只调用这个servlet的service方法. 具体分为4步: 1 构造方法 :服务器在被客户端第一次请求的时候运行 仅在服务器中运行一次 2 init方法:客户端第一次访问服务器的时候在服务器中进行初始化 仅一次.并且可以通过config参数在 web.xml中通过(ke

Tomcat增加Context配置导致启动的时候项目加载两次问题解决方案

1. 出现场景 eclipse发布web应用至tomcat,默认方式下访问该项目是需要带项目名称的,例http://localhost:8080/myapp/.现在需要改成这样访问http://localhost.修改tomcat的server.xml文件,增加如下配置<Context path="" docBase="myapp" reloadable="false"/>,修改后host部分如下: <Host name=&qu

Spring学习(一)tomcat加载web.xml、以及项目集成Spring支持

tomcat容器加载web.xml 一. 1 .启动一个 WEB 项目的时候, WEB 容器会去读取它的配置文件 web.xml ,读取 <listener> 和 <context-param> 两个结点. 2 .紧急着,容创建一个 ServletContext ( servlet 上下文),这个 web 项目的所有部分都将共享这个上下文. 3 .容器将 <context-param> 转换为键值对,并交给 servletContext . 4 .容器创建 <li

Spring task配置,及解决加载两次的方法

? 关于 启动Task任务同时加载两次的解决方法:? 将spring MVC部分的定义另外建立一个文件,同时把Task配置放在此处,然后在web.xml文件中的处加载 <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-pa

spring加载过程中jar包加载不了,解决方法

当我们在开发spring项目时,一般会将jar包放到webInf/lib下,这样是myeclipse自动将jar包加载到tomcat中webapps下,但是当我们新建一个lib文件夹的情况下,我们add building Path时就会出错,这时候我们有个技巧供使用. 1.项目上点击右键搜索de,找到deployment assembly 目的就是将此处添加的jar包添加到系统webINF/lib路径下 来自为知笔记(Wiz) spring加载过程中jar包加载不了,解决方法

关于EasyUI使用tree方法生成树形结构加载两次的问题

html代码中利用class声明了easyui-tree,导致easyUI解析class代码的时候先解析class声明中的easyui-tree这样组件就请求了一次url:然后又调用js初始化代码请求一次url.这样导致了重复加载,解决的方法就是只用一种初始化方法来声明easyUI组件以避免重复的提交请求,即删除html中的class声明(class="easyui-tree"): 加载两次的写法: <div class="easyui-panel" styl