如何减少石英调度延迟

时间:2014-03-05 08:19:25

标签: java spring quartz-scheduler

我在Spring下使用Quartz在jdbc作业存储的支持下,我试图让它“现在”触发一个作业:

Trigger adHocTrigger = TriggerBuilder.newTrigger().withIdentity(adHocTriggerKey).forJob(jobKey).startNow().build();
quartzScheduler.scheduleJob(adHocTrigger); //now

此调用与作业实际开始执行的时间之间的测量延迟默认为~30秒。这是一个测量我使用的一次性触发延迟的示例工作:

@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
   Trigger trigger = context.getTrigger();
   if (!trigger.mayFireAgain()) {
      //its a one-off, compute latency
      long latency = System.currentTimeMillis() - trigger.getFinalFireTime().getTime();
      logger.info("firing latency is {} millis",latency);
   }
}

阅读the documentation后我发现延迟的原因是“org.quartz.scheduler.idleWaitTime”配置参数(基本上是作业存储轮询频率?),可以配置为低至1000毫秒(此时延迟即可达到900毫安)。

据我所知,将其设置为低可能会导致db抖动(我使用jdbc作业存储)并因此不推荐,但有没有办法实现低延迟而不诉诸于此?

是否没有可选的配置属性会导致“fire now”实际执行?

1 个答案:

答案 0 :(得分:0)

文档说'triggerJob'会立即解雇作业。检查这是否满足您的要求。

 quartzScheduler.triggerJob(jobKey);