2011-11-03 131 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存儲,以便在時間觸發觸發器。