2017-02-15 15 views
1

Я заметил, что задания, которые обычно запланированы в полночь (но не могут быть выполнены из-за того, что сервер перешел в режим энергосбережения), выполняются после того, как сервер выходит из режима энергосбережения , Это приводит к неожиданному времени выполнения.Как не выполнять задания, которые прошли по расписанию

Есть ли способ сказать Кварцу не выполнять задания после того, как они слишком далеко от их целевого времени?

ответ

1

Да. Вам просто нужно сказать Quartz, что делать job misfires:

Другим важным свойством триггера является его «инструкция осечка». Пропуски пропуска возникают, если постоянный триггер «пропускает» время срабатывания из-за отключения планировщика или из-за отсутствия доступных потоков в пуле потоков Quartz для выполнения задания. Различные типы триггеров имеют разные инструкции о пропусках. По умолчанию они используют команду «умная политика», которая имеет динамическое поведение, основанное на типе и конфигурации триггера. Когда планировщик запускается, он ищет любые постоянные триггеры, которые пропущены, и затем обновляет каждый из них на основе их индивидуально настроенных инструкций о пропусках. Когда вы начинаете использовать Quartz в своих собственных проектах, вы должны ознакомиться с инструкциями по пропускам, которые определены в данных типах триггеров, и объяснены в их JavaDoc.

Специальная инструкция о пропуске зажигания зависит от используемого вами типа Trigger. Для повседневной работы Это может быть примерно так:

trigger = newTrigger() 
     .withIdentity("trigger1", "group1") 
     .withSchedule(dailyAtHourAndMinute(0,0) 
       .withMisfireHandlingInstructionDoNothing()) // set misfire instruction 
     .build(); 

Но опять же, это зависит от типа триггера. Просто используйте свою IDE, чтобы узнать, какие методы withMisfire*() доступны, и используйте либо withMisfireHandlingInstructionDoNothing, либо withMisfireHandlingInstructionNextWithRemainingCount (оба будут игнорировать пропущенное выполнение и дождитесь следующего запланированного).

Когда мне нужно было узнать о различных типах инструкций о пропуске зажигания, помимо учебников Quartz и документации по API, я использовал this blog entry.

+0

Спасибо! Я использую CronTrigger как этот 'TriggerBuilder.newTrigger(). WithSchedule (CronScheduleBuilder.cronSchedule (cronSchedule) .withMisfireHandlingInstructionDoNothing()). Build();'. Я посмотрю, исправляет ли я свои проблемы, но я уверен. –

+0

@MartinFernau Как все прошло? – walen

+0

выглядит великолепно. Сегодня тесты показывают, что задания больше не выполняются. Благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^