I'm encountering an issue with job recovery in spring-boot-starter-quarz-2.7.18 with Quartz 2.3.2. Despite configuring my jobs with requestRecovery(), I'm unable to recover them after a server crash. Instead, upon restarting the server, I receive the message: "Recovering 0 jobs that were in-progress at the time of the last shut-down."
Im scheduling my job this way:
JobDetail job = newJob(DisenrollPartnersJob.class)
.withIdentity(JobKey.jobKey("Patient Partners Disenroll"))
.withDescription("Disenroll Patients after 48 hours after AutoValidation Failed.")
.storeDurably()
.requestRecovery()
.build();
var trigger = (SimpleTrigger) newTrigger()
.withIdentity(TriggerKey.triggerKey("Quartz_Trigger_DisenrollFailedAutoVerification"))
.startAt(futureDate(48, DateBuilder.IntervalUnit.HOUR))
.forJob(job)
.build();
try {
if (scheduler == null) {
scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
LOG.warn("scheduleNextAutoVerifyDisenroll scheduler was null, start default scheduler with name: {}", scheduler.getSchedulerName());
}
scheduler.getContext().put(ScheduledJobManager.class.getSimpleName(), this);
scheduler.getListenerManager().addJobListener(jobFailureHandlingListener, EverythingMatcher.allJobs());
scheduler.scheduleJob(job, trigger);
LOG.info("scheduleNextAutoVerifyDisenroll scheduled({}) job with KeyName: {}, will trigger at: {}", scheduler.getSchedulerName(), job.getKey().getName(), trigger.getNextFireTime());
} catch (SchedulerException e) {
LOG.error("scheduleNextAutoVerifyDisenroll triggered an exception with message: " + e.getMessage(), e);
}
My application.properties:
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=2
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
org.quartz.jobStore.enableClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000
org.quartz.jobStore.rememberAcquiredJobs = true
# job-store
spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=always
I added
org.quartz.jobStore.enableClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000
to the properties file, with no luck. I also implemented jobFailureHandlingListener to support rescheduling a job when an exception occurs during a job (which is working fine btw).