Listeners是您創(chuàng)建的對象,用于根據調度程序中發(fā)生的事件執(zhí)行操作。您可能猜到,TriggerListeners接收到與觸發(fā)器(trigger)相關的事件,JobListeners 接收與jobs相關的事件。
與觸發(fā)相關的事件包括:觸發(fā)器觸發(fā),觸發(fā)失靈(在本文檔的“觸發(fā)器”部分中討論),并觸發(fā)完成(觸發(fā)器關閉的作業(yè)完成)。
org.quartz.TriggerListener接口
public interface TriggerListener {
public String getName();
public void triggerFired(Trigger trigger, JobExecutionContext context);
public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context);
public void triggerMisfired(Trigger trigger);
public void triggerComplete(Trigger trigger, JobExecutionContext context,
int triggerInstructionCode);
}
job相關事件包括:job即將執(zhí)行的通知,以及job完成執(zhí)行時的通知。
org.quartz.JobListener接口
public interface JobListener {
public String getName();
public void jobToBeExecuted(JobExecutionContext context);
public void jobExecutionVetoed(JobExecutionContext context);
public void jobWasExecuted(JobExecutionContext context,
JobExecutionException jobException);
}
要創(chuàng)建一個listener,只需創(chuàng)建一個實現org.quartz.TriggerListener和/或org.quartz.JobListener接口的對象。然后,listener在運行時會向調度程序注冊,并且必須給出一個名稱(或者,他們必須通過他們的getName()方法來宣傳自己的名字)。
為了方便起見,實現這些接口,您的類也可以擴展JobListenerSupport類或TriggerListenerSupport類,并且只需覆蓋您感興趣的事件。
listener與調度程序的ListenerManager一起注冊,并配有描述listener希望接收事件的job/觸發(fā)器的Matcher。
Listener在運行時間內與調度程序一起注冊,并且不與jobs和觸發(fā)器一起存儲在JobStore中。這是因為聽眾通常是與應用程序的集成點。因此,每次運行應用程序時,都需要重新注冊該調度程序。
添加對特定job感興趣的JobListener:
scheduler.getListenerManager().addJobListener(myJobListener,KeyMatcher.jobKeyEquals(new JobKey("myJobName","myJobGroup")));
您可能需要為匹配器和關鍵類使用靜態(tài)導入,這將使您定義匹配器更簡潔:
import static org.quartz.JobKey.*;
import static org.quartz.impl.matchers.KeyMatcher.*;
import static org.quartz.impl.matchers.GroupMatcher.*;
import static org.quartz.impl.matchers.AndMatcher.*;
import static org.quartz.impl.matchers.OrMatcher.*;
import static org.quartz.impl.matchers.EverythingMatcher.*;
...etc.
這將上面的例子變成這樣:
scheduler.getListenerManager().addJobListener(myJobListener, jobKeyEquals(jobKey("myJobName", "myJobGroup")));
添加對特定組的所有job感興趣的JobListener:
scheduler.getListenerManager().addJobListener(myJobListener, jobGroupEquals("myJobGroup"));
添加對兩個特定組的所有job感興趣的JobListener:
scheduler.getListenerManager().addJobListener(myJobListener, or(jobGroupEquals("myJobGroup"), jobGroupEquals("yourGroup")));
添加對所有job感興趣的JobListener:
scheduler.getListenerManager().addJobListener(myJobListener, allJobs());
注冊TriggerListeners的工作原理相同。
Quartz的大多數用戶并不使用Listeners,但是當應用程序需求創(chuàng)建需要事件通知時不需要Job本身就必須明確地通知應用程序,這些用戶就很方便。
更多建議: