四. SchedulerListener
四.一 接口定义
org.quartz.SchedulerListener
package org.quartz; public interface SchedulerListener { void jobScheduled(Trigger trigger); void jobUnscheduled(TriggerKey triggerKey); void triggerFinalized(Trigger trigger); void triggerPaused(TriggerKey triggerKey); void triggersPaused(String triggerGroup); void triggerResumed(TriggerKey triggerKey); void triggersResumed(String triggerGroup); void jobAdded(JobDetail jobDetail); void jobDeleted(JobKey jobKey); void jobPaused(JobKey jobKey); void jobsPaused(String jobGroup); void jobResumed(JobKey jobKey); void jobsResumed(String jobGroup); void schedulerError(String msg, SchedulerException cause); void schedulerInStandbyMode(); void schedulerStarted(); void schedulerStarting(); void schedulerShutdown(); void schedulerShuttingdown(); void schedulingDataCleared(); }
定义了二十个方法
四.二 接口监听实例
四.二.一 编写自定义监听,实现 SchedulerListener
public class MySchedulerListener implements SchedulerListener { @Override public void jobScheduled(Trigger trigger) { System.out.println("用于部署JobDetail时调用"); } @Override public void jobUnscheduled(TriggerKey triggerKey) { System.out.println("用于卸载JobDetail时调用"); } @Override public void triggerFinalized(Trigger trigger) { System.out.println("当一个 Trigger 来到了再也不会触发的状态时调用这个方法。<br/>除非这个 Job 已设置成了持久性,否则它就会从 Scheduler 中移除"); } @Override public void triggerPaused(TriggerKey triggerKey) { System.out.println("Scheduler 调用这个方法是发生在一个 Trigger被暂停时"); } @Override public void triggersPaused(String s) { System.out.println("Scheduler 调用这个方法是发生在一个 Trigger 组被暂停时。<br/>假如是 Trigger 组的话,triggerName 参数将为 null"); } @Override public void triggerResumed(TriggerKey triggerKey) { System.out.println("Scheduler 调用这个方法是发生成一个 Trigger从暂停中恢复时"); } @Override public void triggersResumed(String s) { System.out.println("Scheduler 调用这个方法是发生成一个 Trigger 组从暂停中恢复时。假如是 Trigger 组的话,triggerName 参数将为 null。"); } @Override public void jobAdded(JobDetail jobDetail) { System.out.println("添加job时调用"); } @Override public void jobDeleted(JobKey jobKey) { System.out.println("删除Job时调用"); } @Override public void jobPaused(JobKey jobKey) { System.out.println("挂起Job时调用"); } @Override public void jobsPaused(String s) { System.out.println("挂起jobs组时调用,假如是组的话,参数将为null"); } @Override public void jobResumed(JobKey jobKey) { System.out.println("恢复Job时调用"); } @Override public void jobsResumed(String s) { System.out.println("恢复Job组时调用,假如是组的话,参数将为null"); } @Override public void schedulerError(String s, SchedulerException e) { System.out.println("在 Scheduler 的正常运行期间产生一个严重错误时调用这个方法"); } @Override public void schedulerInStandbyMode() { System.out.println("当Scheduler处于StandBy模式时,调用该方法"); } @Override public void schedulerStarted() { System.out.println("当Scheduler 开启时,调用该方法"); } @Override public void schedulerStarting() { System.out.println("当Scheduler 开启中,调用该方法"); } @Override public void schedulerShutdown() { System.out.println("当Scheduler停止时,调用该方法"); } @Override public void schedulerShuttingdown() { System.out.println("当Scheduler停止中,调用该方法"); } @Override public void schedulingDataCleared() { System.out.println("当Scheduler中的数据被清除时,调用该方法"); } }
四.二.二 编写 SchedulerListener 监听 Demo
public class SchedulerListenerSchedularDemo { public static void main(String[] args) throws Exception { //获取Scheduler Scheduler scheduler= StdSchedulerFactory.getDefaultScheduler(); // 创建 JobDetail JobDetail jobDetail=JobBuilder.newJob(MyJob.class) .withIdentity("job1","group1") .build(); //创建 Trigger Trigger trigger= TriggerBuilder.newTrigger() .withIdentity("trigger1","group1") //设置标识 .startNow() .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ? ")) .build(); //关联 job和 trigger scheduler.scheduleJob(jobDetail,trigger); //注册监听器 //注册 Scheduler 全局触发器, 没有局部触发器 scheduler.getListenerManager().addSchedulerListener(new MySchedulerListener()); //启动 scheduler scheduler.start(); Thread.sleep(5000L); scheduler.shutdown(); } }
四.二.三 控制台打印输出
监听器,主要是 JobListener 和 TriggerListener 用得比较多一些。