Документация

Документация по разработке bpm’online
PDF
Политики Quartz для обработки не отработавших вовремя заданий

Glossary Item Box

Общие сведения

В Quartz существуют как политики, общие для всех типов триггеров, так и политики, специфичные для конкретного типа триггера. В таблице 1 перечислены все политики, используемые для триггеров SimpleTrigger, CronTrigger и CalendarIntervalTrigger.

Табл. 1. — Политики триггеров

Политика Quartz Значение MISFIRE_INSTR Значение Terrasoft.Core.Scheduler.AppSchedulerMisfireInstruction Тип триггера
IgnoreMisfirePolicy -1 IgnoreMisfirePolicy для всех типов

Описание поведения IgnoreMisfirePolicy

Триггеры с IgnoreMisfirePolicy будут обязательно выполнены. Соответственно, для таких триггеров Quartz не будет обновлять время следующего запуска (NEXT_FIRE_TIME).

Все просроченные задания Quartz попытается выполнить как можно скорее, после чего вернется к изначальному расписанию триггера. Например, запланировано задание с триггером SimpleTrigger на 10 повторений. Исходные условия:

  • START_TIME = 9:00;
  • REPEAT_COUNT = 9 (первое выполнение + 9 повторений);
  • REPEAT_INTERVAL = 0:15.

Если планировщик был выключен с 8:50 до 9:20, то при включении Quartz попытается как можно скорее выполнить 2 просроченных задания (в 9:00 и 9:15). Далее он будет выполнять 8 оставшихся заданий по расписанию — в 9:30; 9:45 и т.д.

SmartPolicy 0 SmartPolicy для всех типов

Описание поведения SmartPolicy

Используется Quartz по умолчанию для всех типов триггеров. В зависимости от типа и конфигурации триггера Quartz выберет соответствующую политику. В псевдокоде ниже приведен алгоритм выбора для версии Quartz 2.3.2.

if (TRIGGER_TYPE == 'SIMPLE') // Триггер Simple.
    if (REPEAT_COUNT == 0) // Без повторов.
        MISFIRE_INSTR = 1 // SimpleTrigger.FireNow
    else if (REPEAT_COUNT == -1) // Повторять бесконечно.
        MISFIRE_INSTR = 4 // SimpleTrigger.RescheduleNextWithRemainingCount
    else // Указано количество повторов.
        MISFIRE_INSTR = 2 // SimpleTrigger.RescheduleNowWithExistingRepeatCount
else if (TRIGGER_TYPE == 'CAL_INT') // Триггер СalendarInterval.
    MISFIRE_INSTR = 1 // CalendarIntervalTrigger.FireOnceNow
else if (TRIGGER_TYPE == 'CRON') // Триггер Cron.
    MISFIRE_INSTR = 1 // CronTrigger.FireOnceNow

SimpleTrigger.FireNow 1 FireNow SimpleTrigger

Описание поведения SimpleTrigger.FireNow

Применяется для триггеров SimpleTrigger у которых значение REPEAT_COUNT равно 0 (триггеры, рассчитанные на 1 запуск). Если значение REPEAT_COUNT не равно 0, то будет применена политика SimpleTrigger.RescheduleNowWithRemainingRepeatCount.

Например, запланировано задание с триггером SimpleTrigger. Исходные условия:

  • START_TIME = 9:00;
  • REPEAT_COUNT = 0.

Если планировщик был выключен с 8:50 до 9:20, то при включении Quartz попытается как можно скорее выполнить задание. В результате, в 9:20 или чуть позже задание будет выполнено.

SimpleTrigger.RescheduleNowWithExistingRepeatCount 2 RescheduleNowWithExistingRepeatCount SimpleTrigger

Описание поведения SimpleTrigger.RescheduleNowWithExistingRepeatCount

Планировщик пытается как можно скорее выполнить первое просроченное задание. Все остальные запуски триггера будут выполнены с интервалом REPEAT_INTERVAL.

Например, запланировано задание с триггером SimpleTrigger на 10 повторений. Исходные условия:

  • START_TIME = 9:00;
  • REPEAT_COUNT = 9;
  • REPEAT_INTERVAL = 0:15.

Если планировщик был выключен с 8:50 до 9:20, то при включении Quartz выполнит первое просроченное задание, назначенное на 9:00, (из заданий в 9:00 и 9:15) в 9:20. Оставшиеся 9 запусков выполнит в 9:35, 9:50 и т.д. .

К СВЕДЕНИЮ

Для методов AppScheduler.ScheduleMinutelyJob поведение RescheduleNowWithExistingRepeatCount идентично RescheduleNowWithRemainingRepeatCount, а поведение RescheduleNextWithRemainingCount идентично RescheduleNextWithExistingCount, поскольку используются триггеры с REPEAT_COUNT = -1.

SimpleTrigger.RescheduleNowWithRemainingRepeatCount 3 RescheduleNowWithRemainingRepeatCount SimpleTrigger

Описание поведения SimpleTrigger.RescheduleNowWithRemainingRepeatCount

Планировщик пытается как можно скорее выполнить первое просроченное задание. Остальные просроченные задания игнорируются. Планировщик выполняет оставшиеся задания, которые не были просрочены, с интервалом REPEAT_INTERVAL.

Например, запланировано задание с триггером SimpleTrigger на 10 повторений. Исходные условия:

  • START_TIME = 9:00;
  • REPEAT_COUNT = 9;
  • REPEAT_INTERVAL = 0:15.

Если планировщик был выключен с 8:50 до 9:20, то при включении Quartz выполнит первое просроченное задание (из заданий в 9:00 и 9:15) в 9:20. Второе просроченное задание будет проигнорировано, и оставшиеся 8 запусков будут выполнены в 9:35, 9:50 и т.д.

SimpleTrigger.RescheduleNextWithRemainingCount 4 RescheduleNextWithRemainingCount SimpleTrigger

Описание поведения SimpleTrigger.RescheduleNextWithRemainingCount

Планировщик игнорирует просроченные задания и ждет следующего планового запуска задания. При наступлении времени следующего запуска будут выполнены оставшиеся не просроченные задания с интервалом REPEAT_INTERVAL.

Например, запланировано задание с триггером SimpleTrigger на 10 повторений. Исходные условия:

  • START_TIME = 9:00;
  • REPEAT_COUNT = 9;
  • REPEAT_INTERVAL = 0:15.

Если планировщик был выключен с 8:50 до 9:20, то при включении Quartz выполнит оставшиеся 8 непросроченных заданий в 9:30; 9:45 и т.д.

SimpleTrigger.RescheduleNextWithExistingCount 5 RescheduleNextWithExistingCount SimpleTrigger

Описание поведения SimpleTrigger.RescheduleNextWithExistingCount

Планировщик будет ждать следующего времени запуска и выполнит все оставшиеся задания с интервалом REPEAT_INTERVAL.

Например, запланировано задание с триггером SimpleTrigger на 10 повторений. Исходные условия:

  • START_TIME = 9:00;
  • REPEAT_COUNT = 9;
  • REPEAT_INTERVAL = 0:15.

Если планировщик был выключен с 8:50 до 9:20, то при включении Quartz выполнит все 10 заданий в 9:30; 9:45 и т.д.

CronTrigger.FireOnceNow 1 - CronTrigger

Описание поведения CronTrigger.FireOnceNow

Планировщик пытается как можно скорее выполнить первое просроченное задание. Остальные просроченные задания игнорируются. Оставшиеся непросроченные задания планировщик выполняет согласно с расписанием.

Например, запланировано задание с триггером CronTrigger: CRON_EXPRESSION = '0 0 9-17 ? * MON-FRI' (с понедельника по пятницу с 9:00 до 17:00). Если планировщик был выключен с 8:50 до 10:20, то при включении в 10:20 Quartz выполнит первое просроченное задание из двух (в 9:00 и 10:00). Далее задания будут выполняться в 11:00, 12:00 и т.д.

CronTrigger.DoNothing 2 - CronTrigger

Описание поведения CronTrigger.DoNothing

Планировщик игнорирует все просроченные задания. Оставшиеся непросроченные задания выполняются согласно с расписанием.

Например, запланировано задание с триггером CronTrigger: CRON_EXPRESSION = '0 0 9-17 ? * MON-FRI' (с понедельника по пятницу с 9:00 до 17:00). Если планировщик был выключен с 8:50 до 10:20, то при включении Quartz начнет выполнять задания с 11:00 (в 11:00, 12:00 и т.д).

CalendarIntervalTrigger.FireOnceNow 1 - CalendarIntervalTrigger

Описание поведения CalendarIntervalTrigger.FireOnceNow

Поведение аналогично CronTrigger.FireOnceNow.

CalendarIntervalTrigger.DoNothing 2 - CalendarIntervalTrigger

Описание поведения CalendarIntervalTrigger.DoNothing

Поведение аналогично CronTrigger.DoNothing.

© Terrasoft 2002-2017.

Был ли данный материал полезен?

Как можно улучшить эту статью?