解决:spring集成quartz,出现2次重复调用的问题
原因,是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配置文件。
在此,还是要感谢楼主呀。要不然,累死也很难发现这个问题。
上一篇: Socket使用之Ftp上传工具类