recovering jobs after server shutdown in Quartz

18 Views Asked by At

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).

0

There are 0 best solutions below