博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz入门实例8-实现一个Job监听器
阅读量:2215 次
发布时间:2019-05-07

本文共 5431 字,大约阅读时间需要 18 分钟。



实现JobListener接口来声明一个Job监听器

通过Scheduler.getListenerManager().addJobListener();注册一个监听器

SimpleJob1.java

package cn.zto.job;import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.Job;import org.quartz.JobDetail;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.JobKey;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class SimpleJob1 implements Job {  public void execute(JobExecutionContext context) throws JobExecutionException {	SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");    JobKey jobKey = context.getJobDetail().getKey();    System.out.println("SimpleJob1 : " + dateFormat.format(new Date()) + jobKey + " 被执行 " );  }}

SimpleJob2.java

package cn.zto.job;import java.text.SimpleDateFormat;import java.util.Date;import org.quartz.Job;import org.quartz.JobDetail;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.JobKey;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class SimpleJob2 implements Job {  public void execute(JobExecutionContext context) throws JobExecutionException {	SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");    JobKey jobKey = context.getJobDetail().getKey();    System.out.println("SimpleJob2 : "+ dateFormat.format(new Date()) + jobKey + " 被执行 " );  }}

Job1Listener.java

package cn.zto.listener;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.JobListener;import org.quartz.SchedulerException;import org.quartz.Trigger;import org.quartz.TriggerBuilder;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import cn.zto.job.SimpleJob2;public class Job1Listener implements JobListener {  public String getName() {    return "job1_to_job2";  }    //Scheduler 在 JobDetail 将要被执行时调用这个方法。  public void jobToBeExecuted(JobExecutionContext inContext) {    System.out.println("Job1Listener : "+inContext.getJobDetail().getKey().getName()+" 将被执行. ");  }  //Scheduler 在 JobDetail 即将被执行,但又被 TriggerListener 否决了时调用这个方法。  public void jobExecutionVetoed(JobExecutionContext inContext) {    System.out.println("Job1Listener : "+inContext.getJobDetail().getKey().getName()+" 被否决  ");  }    //Scheduler 在 JobDetail 被执行之后调用这个方法。  public void jobWasExecuted(JobExecutionContext inContext, JobExecutionException inException) {    System.out.println("Job1Listener : "+inContext.getJobDetail().getKey().getName()+"被执行");    JobDetail job2 = JobBuilder.newJob(SimpleJob2.class).withIdentity("job2").build();    Trigger trigger = TriggerBuilder.newTrigger().withIdentity("job2Trigger").startNow().build();    try{      inContext.getScheduler().scheduleJob(job2, trigger);    } catch (SchedulerException e) {      System.err.println(" job2无法执行! ");      e.printStackTrace();    }  }}

ListenerExample.java

package cn.zto.app;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.JobListener;import org.quartz.Matcher;import org.quartz.Scheduler;import org.quartz.SchedulerFactory;import org.quartz.SchedulerMetaData;import org.quartz.Trigger;import org.quartz.TriggerBuilder;import org.quartz.impl.StdSchedulerFactory;import org.quartz.impl.matchers.KeyMatcher;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import cn.zto.job.SimpleJob1;import cn.zto.listener.Job1Listener;public class ListenerExample{  public void run() throws Exception {	System.out.println("------- 初始化 -------------------");    SchedulerFactory sf = new StdSchedulerFactory();    Scheduler sched = sf.getScheduler();	System.out.println("------- 初始化完成 --------");	System.out.println("------- 向Scheduler加入Job ----------------");    JobDetail job = JobBuilder.newJob(SimpleJob1.class).withIdentity("job1").build();    Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1").startNow().build();        JobListener listener = new Job1Listener();        //根据name和group 匹配一个job实例    Matcher matcher = KeyMatcher.keyEquals(job.getKey());        //为job添加监听器    sched.getListenerManager().addJobListener(listener, matcher);    sched.scheduleJob(job, trigger);    System.out.println("------- 开始Scheduler ----------------");    sched.start();    System.out.println("------- Scheduler调用job结束 -----------------");    try{      Thread.sleep(30000L);    }    catch (Exception e){    }    System.out.println("------- 关闭Scheduler ---------------------");    sched.shutdown(true);    System.out.println("------- 关闭完成 -----------------");    SchedulerMetaData metaData = sched.getMetaData();    System.out.println("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");  }  public static void main(String[] args) throws Exception{    ListenerExample example = new ListenerExample();    example.run();  }}

运行结果:

------- 初始化 -------------------SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.------- 初始化完成 --------------- 向Scheduler加入Job ----------------------- 开始Scheduler ----------------------- Scheduler调用job结束 -----------------Job1Listener : job1 将被执行. SimpleJob1 : 2014年07月31日 21时38分20秒DEFAULT.job1 被执行 Job1Listener : job1被执行SimpleJob2 : 2014年07月31日 21时38分20秒DEFAULT.job2 被执行 ------- 关闭Scheduler ---------------------------- 关闭完成 -----------------Executed 2 jobs.

转载地址:http://mhwfb.baihongyu.com/

你可能感兴趣的文章
【Linux】进程的理解(一)
查看>>
【Linux】进程的理解(二)
查看>>
【C语言】深度理解函数的调用(栈帧)
查看>>
【Linux】进程的理解(三)
查看>>
【C++】带头节点的双向线链表的实现
查看>>
【C++】STL -- Vector容器的用法
查看>>
【Linux】Linux中的0644 和 0755的权限
查看>>
【数据结构】有关二叉树的面试题
查看>>
【Linux】内核态和用户态
查看>>
【Linux】HTTP的理解
查看>>
【Linux】HTTPS的理解
查看>>
【操作系统】大小端问题
查看>>
Git上传代码时碰到的问题及解决方法
查看>>
【Linux】vim的简单配置
查看>>
【C++】智能指针
查看>>
【C++】const修饰的成员函数
查看>>
【C++】面向对象的三大特性
查看>>
【C++】智能指针(后续)
查看>>
【C】堆区和栈区的区别
查看>>
【linux】send和recv函数解析
查看>>