假设我有一个运行每小时的石英作业的tomcat webapp,我已经在运行此应用程序的一个实例的环境中进行了测试。没有重复运行,一切都如预期。
现在我将此应用程序移至具有两个并发运行环境的机器 - DEV和QA。它们运行在单独的JDK上,并具有单独的tomcat安装:/ myapp / tomcatD和/ myapp / tomcatQ。
ps -ef
...
admin 32089 1 2 10:14 pts/2 00:01:53 /myapp/java/jdk1.6.0_45_QA/jre/bin/java -Djava.util. ...
admin 32296 1 99 11:44 pts/2 00:00:06 /myapp/java/jdk1.6.0_45_DEV/jre/bin/java -Djava. ...
首先,我将相同的build和scheduler.xml部署到DEV。它工作好几周。现在我部署到QA并注意到QA在其日志和DEV中重复运行我的预定作业。
我安排DEV的工作在:
运行<value>30 0 * ? * *</value><!-- Every hour on :00 minute :30 second -->
QA的工作是:
<value>0 0 * ? * *</value><!-- Every hour on :00 minute -->
我观察每个日志在XX:00:00和XX:00:30有一次运行。
起初我认为他们只是记录对方的工作。但是,当我关闭DEV时,我注意到QA仍然运行该作业的第二个实例。我还尝试重新启动QA,但仍然没有启动,但也没有用 - 重复运行仍然发生。我还尝试将DEV的scheduler.xml替换为已注释掉所有作业的那个。没有成功。
有关Quartz的幕后情况如何?即使应用程序关闭或重新启动,也必须对这些作业进行一些缓存。
此外,这些应用程序之外是否有一些Quartz进程允许它们运行彼此的工作?
答案 0 :(得分:0)
重新审视这个解决方案以防万一 - 石英没有问题,xml没什么好笑的。
唯一的问题是有人将webapp中的应用程序目录复制+粘贴到一个没人知道的文件夹中。 2个应用程序同时运行。
tomcat
webapps
myapp
examples
some_devious_person_copied_myapp_here and it was running alongside the other one, causing duplicate instances of the jobs