2015-01-14 42 views
0

我正在處理用Quartz預定的服務器作業。目前,我們正試圖找到一種方法來在工作完成時通知用戶。我試圖使用JobListener.jobWasExecuted()方法,但它似乎在作業完成執行後立即調用,但是在調用execute方法之後(以及在返回之前)。什麼時候調用quartz Scheduler JobListener.jobWasExecuted()方法?

這是正確的行爲還是我做錯了什麼?

如果有任何其他建議我可以做到這一點,將不勝感激。

在此先感謝!

編輯: 看完它後,它看起來像監聽程序正常運行(jobWasExecuted()被調用,一旦執行方法返回)除了第一個實例的作業。我們有幾個同時運行的同一個作業的實例。這有什麼理由呢?

回答

0

另一種方法是檢查作業是否正在運行。您可以使用下面的方法來確定您的工作是否在工作班上運行。

private boolean isJobRunning(JobExecutionContext ctx) throws SchedulerException 
{ 
    List<JobExecutionContext> jobs = ctx.getScheduler().getCurrentlyExecutingJobs(); 

    for (JobExecutionContext job : jobs) 
    { 
     // check if the current job is already running (make sure to check that fire times are different so that a different 
     // instance of the same job is checked) 
     if (job.getJobDetail().getJobClass().getName().equals(this.getClass().getName()) && !job.getFireTime().equals(ctx.getFireTime())) 
     { 
      return true; 
     } 
    } 

    return false; 
} 

從複製的鏈接粘貼:http://wordgraphs.com/post/607/Checking-if-a-Quartz-job-is-already-running

+0

如果我找不到第一個作業偵聽程序無法正常工作的原因,此答案將是一個很好的解決方法。謝謝回答! – dhouston

0

我發現這個問題。我開始的工作不屬於我使用的小組的一部分。這造成了一些奇怪的行爲。一旦我刪除了開始額外工作的線路,一切開始按預期工作

0

我有點類似的問題。由於作業監聽者的名稱屬性重複,實際上正在提出;這應該是獨一無二的。

jobWasExecuted()方法在作業的執行方法完成其工作後被調用。粗略地調用層次是這樣

  1. Listener-> jobToBeExecuted()
  2. 作業 - >執行()
  3. Listener-> jobWasExecuted()

PS:雖然有點遲,但可能對某人有幫助。:D