我在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”实际执行?
答案 0 :(得分:0)
文档说'triggerJob'会立即解雇作业。检查这是否满足您的要求。
quartzScheduler.triggerJob(jobKey);