Quartz-SchedulerListener解读
文章目錄
- 概述
- SchedulerListener接口方法解讀
- 示例
- 示例源碼
概述
SchedulerListener 是在 Scheduler 級別的事件產生時得到通知,不管是增加還是移除 Scheduler 中的 Job,或者是 Scheduler 遭遇到了嚴重的錯誤時。那些事件多是關于對 Scheduler 管理的,而不是專注于 Job 或 Trigger 的。
org.quartz.SchedulerListener 接口包含了一系列的回調方法,它們會在 Scheduler 的生命周期中有關鍵事件發生時被調用。
SchedulerListener接口方法解讀
我們先看下SchedulerListener的源碼
public interface SchedulerListener { public void jobScheduled(Trigger trigger); public void jobUnscheduled(String triggerName, String triggerGroup); public void triggerFinalized(Trigger trigger); public void triggersPaused(String triggerName, String triggerGroup); public void triggersResumed(String triggerName,String triggerGroup); public void jobsPaused(String jobName, String jobGroup); public void jobsResumed(String jobName, String jobGroup); public void schedulerError(String msg, SchedulerException cause); public void schedulerShutdown(); }-
jobScheduled() 和 jobUnscheduled():Scheduler 在有新的 JobDetail 部署或卸載時調用這兩個中的相應方法。
-
triggerFinalized() :當一個 Trigger 來到了再也不會觸發的狀態時調用這個方法。除非這個 Job 已設置成了持久性,否則它就會從 Scheduler 中移除。
-
triggersPaused():Scheduler 調用這個方法是發生在一個 Trigger 或 Trigger 組被暫停時。假如是 Trigger 組的話,triggerName 參數將為 null。
-
triggersResumed():Scheduler 調用這個方法是發生成一個 Trigger 或 Trigger 組從暫停中恢復時。假如是 Trigger 組的話,triggerName 參數將為 null。
-
jobsPaused():當一個或一組 JobDetail 暫停時調用這個方法。
-
jobsResumed():當一個或一組 Job 從暫停上恢復時調用這個方法。假如是一個 Job 組,jobName 參數將為 null。
-
schedulerError():在 Scheduler 的正常運行期間產生一個嚴重錯誤時調用這個方法。錯誤的類型會各式的,但是下面列舉了一些錯誤例子:
初始化 Job 類的問題
試圖去找到下一 Trigger 的問題
JobStore 中重復的問題
數據存儲連接的問題
你可以使用 SchedulerException 的 getErrorCode() 或者 getUnderlyingException() 方法或獲取到特定錯誤的更詳盡的信息。
- schedulerShutdown():Scheduler 調用這個方法用來通知 SchedulerListener Scheduler 將要被關閉。
示例
Job復用TriggerListener中的SimpleJob1
詳見 Quartz-TriggerListener解讀
自定義SchedulerListener
package com.xgj.quartz.quartzItself.listener.schedulerListener;import org.quartz.JobDetail; import org.quartz.JobKey; import org.quartz.SchedulerException; import org.quartz.SchedulerListener; import org.quartz.Trigger; import org.quartz.TriggerKey;public class MySchedulerListener implements SchedulerListener {@Overridepublic void jobScheduled(Trigger trigger) {System.out.println("MySchedulerListener jobScheduled trigger");}@Overridepublic void jobUnscheduled(TriggerKey triggerKey) {System.out.println("MySchedulerListener jobScheduled triggerKey");}@Overridepublic void triggerFinalized(Trigger trigger) {System.out.println("MySchedulerListener triggerFinalized");}@Overridepublic void triggerPaused(TriggerKey triggerKey) {System.out.println("MySchedulerListener triggerPaused");}@Overridepublic void triggersPaused(String triggerGroup) {System.out.println("MySchedulerListener triggersPaused");}@Overridepublic void triggerResumed(TriggerKey triggerKey) {System.out.println("MySchedulerListener triggerResumed triggerKey");}@Overridepublic void triggersResumed(String triggerGroup) {System.out.println("MySchedulerListener triggerResumed triggerGroup");}@Overridepublic void jobAdded(JobDetail jobDetail) {System.out.println("MySchedulerListener jobAdded");}@Overridepublic void jobDeleted(JobKey jobKey) {System.out.println("MySchedulerListener jobDeleted");}@Overridepublic void jobPaused(JobKey jobKey) {System.out.println("MySchedulerListener jobPaused jobKey");}@Overridepublic void jobsPaused(String jobGroup) {System.out.println("MySchedulerListener jobsPaused jobGroup");}@Overridepublic void jobResumed(JobKey jobKey) {System.out.println("MySchedulerListener jobResumed jobKey");}@Overridepublic void jobsResumed(String jobGroup) {System.out.println("MySchedulerListener jobsResumed jobGroup");}@Overridepublic void schedulerError(String msg, SchedulerException cause) {System.out.println("MySchedulerListener schedulerError");}@Overridepublic void schedulerInStandbyMode() {System.out.println("MySchedulerListener schedulerInStandbyMode");}@Overridepublic void schedulerStarted() {System.out.println("MySchedulerListener schedulerStarted");}@Overridepublic void schedulerStarting() {System.out.println("MySchedulerListener schedulerStarting");}@Overridepublic void schedulerShutdown() {System.out.println("MySchedulerListener schedulerShutdown");}@Overridepublic void schedulerShuttingdown() {System.out.println("MySchedulerListener schedulerShuttingdown");}@Overridepublic void schedulingDataCleared() {System.out.println("MySchedulerListener schedulingDataCleared");}}調度類
package com.xgj.quartz.quartzItself.listener.schedulerListener;import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrigger;import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.SchedulerListener; import org.quartz.SchedulerMetaData; import org.quartz.Trigger; import org.quartz.impl.StdSchedulerFactory;import com.xgj.quartz.quartzItself.listener.triggerListener.SimpleJob1;public class SchedulerListenerDemo {public static void main(String[] args) throws Exception {System.out.println("------- 初始化 ----------------------");// SchedulerSchedulerFactory schedulerFactory = new StdSchedulerFactory();Scheduler scheduler = schedulerFactory.getScheduler();// 添加監聽器SchedulerListener schedulerListener = new MySchedulerListener();scheduler.getListenerManager().addSchedulerListener(schedulerListener);// JobJobDetail job = newJob(SimpleJob1.class).withIdentity("job1", "group1").build();// TirggerTrigger trigger = newTrigger().withIdentity("trigger1", "group1").startNow().build();// 將job任務加入到調度器scheduler.scheduleJob(job, trigger);// 開始任務System.out.println("------- 開始執行調度器 Scheduler ----------------");scheduler.start();try {System.out.println("------- 等待 30 秒... --------------");Thread.sleep(30L * 1000L);} catch (Exception e) {e.printStackTrace();}scheduler.shutdown(true);System.out.println("------- 關閉調度器 -----------------");SchedulerMetaData metaData = scheduler.getMetaData();System.out.println("~~~~~~~~~~ 執行了 "+ metaData.getNumberOfJobsExecuted() + " 個 jobs.");} }運行結果
------- 初始化 ---------------------- INFO StdSchedulerFactory - Using default implementation for ThreadExecutor INFO SimpleThreadPool - Job execution threads will use class loader of thread: main INFO SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl INFO QuartzScheduler - Quartz Scheduler v.2.2.3 created. INFO RAMJobStore - RAMJobStore initialized. INFO QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.2.3) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.NOT STARTED.Currently in standby mode.Number of jobs executed: 0Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.INFO StdSchedulerFactory - Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties' INFO StdSchedulerFactory - Quartz scheduler version: 2.2.3 MySchedulerListener jobAdded MySchedulerListener jobScheduled trigger ------- 開始執行調度器 Scheduler ---------------- MySchedulerListener schedulerStarting INFO QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started. MySchedulerListener schedulerStarted ------- 等待 30 秒... --------------Job1 - 任務key group1.job1執行時間:2017-11-16 22:14:33 MySchedulerListener triggerFinalized MySchedulerListener jobDeleted INFO QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down. INFO QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused. MySchedulerListener schedulerInStandbyMode MySchedulerListener schedulerShuttingdown MySchedulerListener schedulerShutdown INFO QuartzScheduler - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete. ------- 關閉調度器 ----------------- ~~~~~~~~~~ 執行了 1 個 jobs.示例源碼
代碼已托管到Github—> https://github.com/yangshangwei/SpringMaster
總結
以上是生活随笔為你收集整理的Quartz-SchedulerListener解读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Quartz-TriggerListen
- 下一篇: Spring-JDK Timer 以及在