我计划在安排石英后立即开始紧急工作。 我的代码在下面。我将当前时间作为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);
答案 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存储,这会导致触发器在时间被触发。