Creatio development guide
PDF
Документация по разработке
Описание платформы
Это документация Creatio версии 7.12.0. Мы рекомендуем использовать новую версию документации.

Политики 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-2019.

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

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