Quartz Scheduler 可以對Trigger建立一個監聽器,分別對Trigger的各種狀態進行監聽
實現監聽器需要實現TriggerListener接口,然后注冊到Scheduler上就可以了。
一:寫一個類實現觸發器監聽接口
package com.gary.operation.jobdemo.example1; import org.quartz.JobExecutionContext; import org.quartz.Trigger; import org.quartz.Trigger.CompletedExecutionInstruction; import org.quartz.TriggerListener; public class MyTriggerListener implements TriggerListener { @Override public String getName() { return "MyOtherTriggerListener"; } /** * (1) * Trigger被激發 它關聯的job即將被運行 * Called by the Scheduler when a Trigger has fired, and it's associated JobDetail is about to be executed. */ @Override public void triggerFired(Trigger trigger, JobExecutionContext context) { System.out.println("MyOtherTriggerListener.triggerFired()"); } /** * (2) * Trigger被激發 它關聯的job即將被運行,先執行(1),在執行(2) 如果返回TRUE 那么任務job會被終止 * Called by the Scheduler when a Trigger has fired, and it's associated JobDetail is about to be executed */ @Override public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) { System.out.println("MyOtherTriggerListener.vetoJobExecution()"); return false; } /** * (3) 當Trigger錯過被激發時執行,比如當前時間有很多觸發器都需要執行,但是線程池中的有效線程都在工作, * 那么有的觸發器就有可能超時,錯過這一輪的觸發。 * Called by the Scheduler when a Trigger has misfired. */ @Override public void triggerMisfired(Trigger trigger) { System.out.println("MyOtherTriggerListener.triggerMisfired()"); } /** * (4) 任務完成時觸發 * Called by the Scheduler when a Trigger has fired, it's associated JobDetail has been executed * and it's triggered(xx) method has been called. */ @Override public void triggerComplete(Trigger trigger, JobExecutionContext context, CompletedExecutionInstruction triggerInstructionCode) { System.out.println("MyOtherTriggerListener.triggerComplete()"); } }
二進行注冊: 細節與注冊任務監聽器一樣(http://www.cnblogs.com/daxin/archive/2013/05/29/3105830.html)
Registering A TriggerListener With The Scheduler To Listen To All Triggers scheduler.getListenerManager().addTriggerListener(myTriggerListener, allTriggers()); Registering A TriggerListener With The Scheduler To Listen To A Specific Trigger scheduler.getListenerManager().addTriggerListener(myTriggerListener, triggerKeyEquals(triggerKey("myTriggerName", "myTriggerGroup"))); Registering A TriggerListener With The Scheduler To Listen To All Triggers In a Group scheduler.getListenerManager().addTriggerListener(myTriggerListener, triggerGroupEquals("myTriggerGroup"));
