Search code examples
javaspring-bootquartz-schedulerjobs

Quartz Scheduler next execution time equal current time plus interval of scheduler


I am working with Quartz scheduler and everything work perfect according to the requirement. But there one thing that I want to implement and i.e. I want my next execution of job will trigger on (currentFinishTime + intervalOfScheduler)

Example of job execution with 30 seconds of interval:

Job-1-First-Executed at 10-10-2020 18:30:05
Job-1-Second-Executed at 10-10-2020 18:30:35
Job-1-Third-Executed at 10-10-2020 18:31:05

So, here if the job takes 20 seconds to execute then next trigger will happen on 05+20+30 = 55. Instead of 10-10-2020 18:30:35, it will trigger at 10-10-2020 18:30:55 and same for other execution and so on...

Note: @DisallowConcurrentExecution and MyJobExecutor implements Job {public void execute(JobExecutionContext context){...}} are already implemented.

Please help me to solve my problem.


Solution

  • After a lots of research, I have implemented my own solution which suffice my requirement. The code is mentioned below:

    if(isExecutionTimeIncluded) {
        final TriggerBuilder triggerBuilder = context.getTrigger().getTriggerBuilder();
        final Trigger newTrigger = triggerBuilder
                      .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                      .withIntervalInSeconds(cpoPullJobData.getInterval())
                                    .repeatForever())
                      .startAt(futureDate(interval/*eg.30*/, DateBuilder.IntervalUnit.SECOND);)
                      .build();
        context.getScheduler().rescheduleJob(context.getTrigger().getKey(), newTrigger);
    }