Я впервые пытаюсь настроить Quartz, и простите, если я чего-то не понимаю. Мне интересно, как лучше всего добиться следующего:
Как настроить задание, которое должно запускать ежедневный отчет по электронной почте, а также иметь возможность восстанавливаться после пропущенного триггера, чтобы: 1) задание знало, в какой день ПРЕДНАЗНАЧЕН для срабатывания триггера. и 2) если (не дай бог) сервер не работает в течение 3 дней, Quartz восстановится, запустив три пропущенных дня подряд, также сообщая заданию, какой день представляет каждое задание. (порядок выполнения на самом деле не важен, если я знаю, какой день каждый представляет)
Прямо сейчас я просто делаю:
Trigger trigger = newTrigger()
.withIdentity("dailyTrigger", "scheduledReportEmail")
.startNow()
.withSchedule(dailyAtHourAndMinute(0, 5) .withMisfireHandlingInstructionFireAndProceed())
.build();
Кажется, что это восстанавливается только после одного запуска, независимо от того, сколько дней пропущено. Это верно?
Один из подходов, о котором я подумал, - это установка 31 ежедневного триггера на дни 1-31. Неуклюжий .. а что может случиться в феврале за эти лишние дни? Это лучший подход?
У меня также есть еженедельные и ежемесячные триггеры, но я полагаю, что если мы упадем на три недели, у нас есть более важные вещи, о которых нужно беспокоиться :)
Спасибо за любой совет ....
1 ответ
Ваш вариант использования довольно стандартный и поддерживается Quartz. Вам просто нужна политика « игнорировать пропуски зажигания »:
Trigger trigger = newTrigger()
.withIdentity("dailyTrigger", "scheduledReportEmail")
.withSchedule(dailyAtHourAndMinute(0, 5)
.withMisfireHandlingInstructionIgnoreMisfires())
.build();
В основном это означает: меня не волнует, что триггер (ы) не сработал, просто запустите его как можно скорее (это, скорее всего, при запуске приложения).
Чтобы выяснить, когда предполагается запуск данного триггера (каково было запланированное время, а не текущее время), запустите это в своем задании:
void execute(JobExecutionContext context) {
final Date scheduled = context.getScheduledFireTime()
//...
}
Смотрите также
- разница между последним фактическим и запланированным временем пожара
- проблема при использовании кварца с MisfireHandlingInstructionIgnoreMisfires
- Объяснение инструкций по пропуску зажигания в кварцевом планировщике a> - моя статья с описанием различных инструкций по пропуску зажигания
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.