2014-01-20 72 views
3

我有以下石英工作。我用它做了一些測試。石英異常處理

public void execute(JobExecutionContext context) throws JobExecutionException { 
    try { 

     Object result = callable.call(); 

    } catch (Exception e) { 
     JobExecutionException e2 = new JobExecutionException(e); 
     if (REFIRE_IMMEDIATELY.equals(policy)) { 
      e2.setRefireImmediately(true); 
     } else if (UNSCHEDULE_ALL_TRIGGERS.equals(policy)) { 
      e2.setUnscheduleAllTriggers(true); 
     } else { 
      e2.setUnscheduleFiringTrigger(true); 
     } 
     throw e2; 
    } 
} 

但我不能完全理解是什麼setUnscheduleAllTriggerssetUnscheduleFiringTrigger之間的差異。不幸的是,沒有Javadoc。

有人可以幫助我嗎?

謝謝

回答

3

在石英中,你可以有多個觸發器來觸發你的工作。如果作業執行失敗的原因是觸發器固有的,則可能需要取消調度該特定觸發器。這是我對setUnscheduleFiringTrigger(true)的理解。

如果問題出在工作本身而不是觸發器上,那麼每次執行都會失敗,不管是誰或是什麼時候啓動它。因此,爲了節省自己多次執行失敗的麻煩,僅因爲不同的觸發器觸發了該作業,可以使用setUnscheduleAllTriggers(true)來取消調度觸發此作業的所有觸發器,從而防止進一步執行錯誤作業。

所以總結

  • setUnscheduleFiringTrigger =>停止調用此特定作業運行的觸發
  • setUnscheduleAllTriggers =>停止所有觸發器調用這個工作

http://quartz-scheduler.org/documentation/quartz-2.x/examples/Example6的示例例外的用法。

+0

是的,看到這個例子。我只是忘記了多個觸發器可能會觸發這項工作。謝謝你的解釋。 – Pith