У меня есть приложение, использующее 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
Мои задания выполняются долго, поэтому при запуске новых заданий довольно часто работают 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.
Как только выполняемое задание заканчивается, одно из пропущенных заданий будет подхвачено и выполнено в обычном режиме. Тем не менее, похоже, что Quartz выбирает случайное задание случайным образом, независимо от порядка выполнения заданий. В идеале я бы хотел, чтобы их подбирали в том порядке, в котором они должны были работать, исходя из их первоначального времени стрельбы.
Можно ли сделать так, чтобы мои ожидающие (пропущенные) задания запускались в том порядке, в котором они были запущены, когда станет доступно пространство в Quartz ThreadPool?