В моем приложении для весенней загрузки есть планировщик (Quartz).Он использует источник данных, определенный в моем весеннем приложении.Я использую MISFIRE_INSTRUCTION_FIRE_NOW
. Я знаю, что он срабатывает при запуске планировщика.Теперь в моей работе я делаю две вещи:
- Хранение данных с использованием Spring Batch в моей базе данных
- Затем извлекаю те же данные и затем отправляю им электронное письмо
Я хочу знать, предположим, что если сервер останавливается / планировщик не работает, т.е. происходит аварийное переключение при выполнении задания .Планировщик перезапускает весь объект или он начинается с того места, где он был остановлен?
Поскольку сообщения электронной почты будут отправляться снова и снова, если задание не будет выполнено.
Триггер
public static Trigger buildJobTrigger(JobDetail jobDetail, Date scheduleDateTime) {
return TriggerBuilder.newTrigger()
.forJob(jobDetail)
.withIdentity(jobDetail.getKey().getName(), "email-triggers")
.withDescription("Send email Trigger")
.startAt(scheduleDateTime)
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withMisfireHandlingInstructionFireNow())
.build();
}
Также есть способ узнать, не удалось ли выполнить задание или был успешным, и я вижу данные в таблице qrtz_fired_triggers
, когда задание происходит, но затем оно удаляется позже.Есть ли способ сохранить его?Я использовал storeDurably как таковой, но ничего не сохраняется.
Job
return JobBuilder.newJob(jobClass)
.withIdentity(UUID.randomUUID().toString(), "email-jobs")
.withDescription(description)
.usingJobData(jobDataMap)
.requestRecovery(true)
.storeDurably(true)
.build();