欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

quartz的任务调度,同一个任务,在相同的时间被调用了2次

程序员文章站 2022-07-14 10:49:00
...
源:http://www.iteye.com/topic/173080
评:
应大家要求,解释一下原因,是TOMCAT的配置文件server.xml配置不当引起的,
请看下面这段配置就是错误的:
<Host name="www.***.com" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true" />
<Context path="" docBase="/tomcat/webapps/***" debug="1" />
<Context path="/***2" docBase="/tomcat/webapps/***2" debug="1" />
</Host>

正确的配置如下
<Host name="www.***.com" debug="0" appBase="" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="localhost_log." suffix=".txt" timestamp="true" />
<Context path="" docBase="/tomcat/webapps/***" debug="1" />
<Context path="/***2" docBase="/tomcat/webapps/***2" debug="1" />
</Host>
这两段的区别是第二段去除了appBase="webapps"中的webapps变成了appBase="",因为web应用程序都是放在webapps这个目录下的,如果不把“webapps“去掉,这里会调用一次quartz的任务调度,在接下来的“<Context path”中又会调用一次quartz的任务调度,所以就重复了2次

----------------------
看了此贴确实解决了我的问题。但是我要补充一下:楼主所说的情况并没有完全描述清楚
现在问题分两种情况:
1:把工程发布到tomcat的webapps目录下:
这样执行定时任务是没有问题的。我们也不用更改tomcat的配置。我找了几个tomcat,发现appBase="webapps"是tomcat的默认配置。我们在本地测试时发现定时任务只会执行一次。而且对多个定时进行监控,一切正常。所以,如果此种情况,那么,恭喜你,你不要改配置文件。
2:在tomcat的conf\Catalina\localhost目录下放置配置文件,把配置文件指向tomcat的外部工程。
这样就会出现调用两次定时任务的情况。所以请按楼主所描述的那样修改tomcat的server.xml配置文件。
在此,还是要感谢楼主呀。要不然,累死也很难发现这个问题。