2011-11-03 132 views
0

我试着在计划石英后立即运行紧急工作。 我的代码在下面。我给当前时间作为startTime。 需要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); 

回答

1

这只是一个猜测(它是因为我已经用石英一段时间),但因为你创造了Date情况下,你居然叫build()之前,它可能不能够满足时间限制,简单地当下一个预定的触发器发射时,40秒后发射。尝试这样的确认:

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

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

8

您还可以用火的:

scheduler.triggerJob(jobDetail.getKey()); 
+0

我得到以下异常。触发器引用的作业(1.187)不存在 – user725455

+0

现在我能够毫无例外地触发作业。即使我有20秒的延迟。我配置Quartz和Jboss并使用EJB。 JBoss配置中是否有特殊配置可以立即触发作业? – user725455

0

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