Jon*_*oth 9 java quartz-scheduler
我有一个使用Quartz Scheduler来安排作业的应用程序.该应用程序目前正在运行Quartz 1.6.2版.我的JobStore是org.quartz.impl.jdbcjobstore.JobStoreTX,带有支持它的Oracle数据库.启用了群集,但只有一个使用该数据库的调度程序.我的Quartz threadPool配置如下:
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5
Run Code Online (Sandbox Code Playgroud)
我的工作是长期运行的,因此当触发器触发新作业时,运行5个作业(我的thead池允许的最大值)是相当普遍的.新触发的工作失败了,我看到如下的日志消息:
2011-05-20 04:09:30,097 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName1 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:08:29 05/20/2011
2011-05-20 04:09:30,120 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName1 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:09:30 05/20/2011
2011-05-20 04:09:30,125 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName2 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:08:30 05/20/2011
2011-05-20 04:09:30,138 INFO [QuartzScheduler_scheduler-servername-111305822374881_MisfireHandler] o.q.p.h.LoggingTriggerHistoryPlugin - Trigger DEFAULT.JobName2 misfired job DEFAULT.DEFAULT at: 04:09:30 05/20/2011. Should have fired at: 04:09:30 05/20/2011
2011-05-20 04:11:29,998 INFO [QuartzScheduler_scheduler-servername-111305822376676_MisfireHandler] o.q.impl.jdbcjobstore.JobStoreTX - Handling 2 trigger(s) that missed their scheduled fire-time.
Run Code Online (Sandbox Code Playgroud)
一旦正在运行的作业完成,其中一个失实的作业将被选中并正常运行.但是,Quartz似乎随机选择了一个失误的工作,而不考虑最初计划执行的工作顺序.理想情况下,我希望他们按照他们应该按照他们原来的火灾时间运行的顺序被选中.
一旦Quartz ThreadPool中的空间可用,是否有可能使我的等待(失火)作业按照它们被触发的顺序被触发?
当石英处理错过触发时间的触发器时,它将更新nextFireTime触发器的 。默认情况下,如果 nextFireTime 过去超过 60 秒,则触发将被视为错过。仍然应该根据 nextFireTime 和优先级顺序选择错过的触发器,但我猜它似乎是随机的,因为某些触发器已更新,而其他触发器尚未更新。
我建议增加org.quartz.jobStore.misfireThreshold财产。请参阅http://www.quartz-scheduler.org/documentation/quartz-2.x/configuration/ConfigRAMJobStore.html(尽管所有JobStore 的属性都是相同的)。这应该会降低您的触发器被重新安排的可能性。