tomcat中context导致定时任务等程序执行两次

tomcat | 2019-09-13 10:02:39

今天发现部署war到tomcat中报了很多错,包括数据表锁死等问题,仔细看日志,发现一些初始化程序,和定时任务都执行了两遍,觉得很奇怪。

想起今天再tomcat的server配置了context如下:

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
   prefix="localhost_access_log" suffix=".txt"
   pattern="%h %l %u %t &quot;%r&quot; %s %b" />
<Context path="" docBase="synchronize-web" debug="0" reloadable="true"/>
</Host>

原来是我把war放在webapps下面,host把war就执行了一遍,然后context又执行了一遍,我觉得这算bug了,我context配置相对路径,就不要重复加载程序了嘛。

我之所以配置context是希望把项目文件夹作为root目录,这样访问时就不用带项目名。

解决方法:配置host或者context,让他们配置的目录不要交叉,都用绝对路径,也可以context的docBase直接指向外面目录的war。

<Host name="localhost"  appBase=""
            unpackWARs="false" autoDeploy="false"
            xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="C:\Program Files\Tomcat 6.0\webapps\XXX\"  workDir="C:\Program Files\Tomcat 6.0\webapps\XXX5xun5mi\"  />
</Host>


注意:问题是解决了,你要时对context不熟,还是不要用context了,因为太多不可控了,官方也不建议用。

所以我最后还是去掉了context,每次部署把war包改成ROOT.war放到webapps里面。

登录后即可回复 登录 | 注册
    
关注编程学问公众号