【问题标题】:Quartz Scheduler next execution time equal current time plus interval of schedulerQuartz调度器下一次执行时间等于当前时间加上调度器间隔
【发布时间】:2020-10-06 13:11:56
【问题描述】:

我正在使用 Quartz 调度程序,一切都按照要求完美运行。但是我想要实现一件事,即我希望我的下一次执行作业将在 (currentFinishTime + intervalOfScheduler)

上触发

以 30 秒为间隔的作业执行示例:

Job-1-First-Executed 于 10-10-2020 18:30:05
Job-1-Second-执行于 10-10-2020 18:30:35
Job-1-Third-执行于 10-10-2020 18:31:05

因此,如果作业需要 20 秒执行,那么下一次触发将在 05+20+30 = 55 发生。而不是 10-10-2020 18:30:35,它将在 2020 年 10 月 10 日触发18:30:55 和其他执行一样...

注意:@DisallowConcurrentExecutionMyJobExecutor implements Job {public void execute(JobExecutionContext context){...}} 已经实现。

请帮我解决我的问题。

【问题讨论】:

    标签: java spring-boot quartz-scheduler jobs


    【解决方案1】:

    经过大量研究,我已经实现了自己的解决方案,足以满足我的要求。代码如下:

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-29
      相关资源
      最近更新 更多