Quartz:单线程有时运行两次

时间:2017-06-19 07:49:31

标签: java quartz-scheduler

我的应用程序每天触发三次,有时同一个调度程序在立即完成作业后运行两次。这种行为不一致。

Quartz配置详情:

org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=1
org.quartz.threadPool.threadPriority=5
org.quartz.scheduler.skipUpdateCheck=true
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX

触发器:

     SCHED_NAME,    TRIGGER_NAME,       TRIGGER_GROUP,      CRON_EXPRESSION,    TIME_ZONE_ID
     ocscheduler     AusNzlJobTrigger    DEFAULT         0 0 17 ? * SUN-THU *    Australia/Melbourne
     ocscheduler     UKJobTrigger        DEFAULT         0 0 22 ? * SUN-THU *   Europe/London
     ocscheduler     AmericaJobTrigger   DEFAULT         0 0 20 ? * SUN-THU * America/New_York

如果有任何人遇到同样的问题,请帮我解决这个问题。 我发现很难找到根本原因,有时为什么同样的工作运行两次。

1 个答案:

答案 0 :(得分:0)

如果不允许您的作业同时运行(您正在使用@DisallowConcurrentExecution或其他某种机制),并且完成时间比计划时间之间的时间间隔长(例如纽约触发时间超过5)小时),可能会发生熄火,根据您的配置,您的一个触发器可能在同一天触发两次:一次是昨天的失误执行,另一次是今天的预定执行。

还要记住:

  墨尔本时区的17:00是07:00 UTC   22:00在纽约时区是02:00 UTC   伦敦时区的20:00是19:00 UTC。

无论如何,如果您为触发器的日程安排包含了代码,那就太好了。