立即执行工作

时间:2011-11-03 07:26:22

标签: java quartz-scheduler

我计划在安排石英后立即开始紧急工作。 我的代码在下面。我将当前时间作为startTime。 Bnt计划后需要30-40秒才能完成工作。如何立即运行。

// Trigger the job to run now, and then repeat every 40 seconds 
jobTrigger= newTrigger() 
.withIdentity(Long.toString(emergencyJob.getId()), Long.toString(emergencyJob.getVariant().getId())) 
.withPriority(emergencyJob.getPriority()) 
.startAt(new Date(ctime)) 
.withSchedule(simpleSchedule().withMisfireHandlingInstructionFireNow() 
) 
.build(); 

scheduler.scheduleJob(jobDetail, jobTrigger);

3 个答案:

答案 0 :(得分:8)

你也可以用以下方法解雇:

scheduler.triggerJob(jobDetail.getKey());

答案 1 :(得分:1)

这只是一个猜测(我使用石英已经有一段时间了),但是因为你在实际调用Date之前创建了build()实例,它可能无法满足时间限制,并在下一个计划的触发器触发后40秒后触发。尝试这样的事情来确认:

.startAt(new Date(System.currentTimeMillis() + 1000))

使用1000毫秒的值来满足您的需求。这是为了让它有更多的时间来满足第一个预定的触发器。

答案 2 :(得分:0)

可能有点迟了,但也许有人会觉得这很有用。我在JBoss AS上遇到了与石英相同的问题(触发器执行得很晚 - 大约20-30秒,没有明显的原因)。我得出结论,这是由JBoss中的一些错误引起的。相同的应用程序在glassfish上运行良好。为了使用eclipse链接,我只更改了PU,其他持久性在JBoss上工作得很好,所以我不认为那里有问题。只有在使用石英数据库任务存储时才会出现此行为,RAM存储工作正常。 回答这个问题。如果您使用数据库任务库,请考虑将其更改为RAM存储,这会导致触发器在时间被触发。