Quartz.NET триггер: выполняется один раз за указанный интервал.

#scheduling #quartz.net

#планирование #quartz.net

Вопрос:

Я использую Quartz.NET библиотека в службе Windows для выполнения ежедневных заданий среди прочего. Я использую AdoJobStore. По сути, я хочу, чтобы моя работа выполнялась один раз в любое время, например, между полуночью и 1 час ночи. Итак, если служба была остановлена в полночь, а кто-то запускает ее в 00:30, я хочу, чтобы задание было выполнено тогда (только один раз), но если служба запускается в 2 часа ночи, я не хочу, чтобы задание выполнялось в тот день.

Как можно настроить триггер для запуска только один раз за указанный интервал?

Ответ №1:

Похоже, вам нужно настраиваемое поведение «misfire». Из документов Quartz:

Инструкции по пропуску

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

К сожалению, поведение, которое вам нужно, не поддерживается из коробки. Вам нужно будет запланировать выполнение задания точно в полночь, а затем реализовать пользовательскую осечку. Это должно быть возможно использовать ITriggerListener.TriggerMisfired .