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

Для этого я попробовал ниже:

TriggerBuilder.newTrigger().withIdentity(jobName, jobGroup)
            .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)
                      .withMisfireHandlingInstructionDoNothing())
            .withPriority(jobPriority).build();

Это задание запускается еженедельно по вторникам. Скажем, в один из вторников служба не работала, а сейчас - в пятницу. Тогда задание должно сработать в следующий вторник, а не тогда, когда появится услуга.

Но приведенный выше код не работает. задание запускается, как только появляется служба.

Примечание: я вручную пересылаю время, чтобы проверить это (на случай, если это имеет значение)

0
user2048204 25 Ноя 2020 в 22:59

1 ответ

Лучший ответ

Думаю, я понял.

Чтобы MisfireHandlingInstruction вступила в силу, задержка должна быть больше, чем значение, установленное

org.quartz.jobStore.misfireThreshold = 600000

В противном случае кварц никогда не считает спусковой крючок пропуском зажигания. поэтому инструкция о пропуске зажигания не вступит в силу.

Из здесь

Прежде чем я углублюсь в детали, следует описать еще один вариант конфигурации. Это org.quartz.jobStore.misfireThreshold (в миллисекундах), по умолчанию - 60000 (минута). Он определяет, насколько поздно должен быть сработал спусковой крючок. При настройке по умолчанию, если триггер должен был сработать 30 секунд назад, Quartz просто запустит его. Такая задержка не считается пропуском зажигания. Однако, если триггер обнаружен через 61 секунду после запланированного времени - об этом позаботится специальный поток обработчика пропусков зажигания, подчиняющийся инструкции пропуска зажигания. В целях тестирования мы установим этот параметр на 1000 (1 секунда), чтобы мы могли быстро проверить пропуски зажигания.

0
user2048204 27 Ноя 2020 в 06:30