Quartz JobListener 任务监听器

Quartz  Scheduler 可以对Job(任务)建立一个监听器,分别对任务执行  《之前, 之后, 取消》 3个阶段进行监听。 

实现监听器需要实现JobListener接口,然后注册到Scheduler上就可以了。

一:首先写一个监听器实现类

 1 package com.gary.operation.jobdemo.example1;  2 

 3 import org.quartz.JobExecutionContext;  4 import org.quartz.JobExecutionException;  5 import org.quartz.JobListener;  6 

 7 public class MyJobListener implements JobListener {  8 

 9  @Override 10     public String getName() { 11         return "MyJobListener"; 12  } 13 

14     /**

15  * (1) 16  * 任务执行之前执行 17  * Called by the Scheduler when a JobDetail is about to be executed (an associated Trigger has occurred). 18      */

19  @Override 20     public void jobToBeExecuted(JobExecutionContext context) { 21         System.out.println("MyJobListener.jobToBeExecuted()"); 22  } 23 

24     /**

25  * (2) 26  * 这个方法正常情况下不执行,但是如果当TriggerListener中的vetoJobExecution方法返回true时,那么执行这个方法. 27  * 需要注意的是 如果方法(2)执行 那么(1),(3)这个俩个方法不会执行,因为任务被终止了嘛. 28  * Called by the Scheduler when a JobDetail was about to be executed (an associated Trigger has occurred), 29  * but a TriggerListener vetoed it's execution. 30      */

31  @Override 32     public void jobExecutionVetoed(JobExecutionContext context) { 33         System.out.println("MyJobListener.jobExecutionVetoed()"); 34  } 35 

36     /**

37  * (3) 38  * 任务执行完成后执行,jobException如果它不为空则说明任务在执行过程中出现了异常 39  * Called by the Scheduler after a JobDetail has been executed, and be for the associated Trigger's triggered(xx) method has been called. 40      */

41  @Override 42     public void jobWasExecuted(JobExecutionContext context, 43  JobExecutionException jobException) { 44         System.out.println("MyJobListener.jobWasExecuted()"); 45  } 46 

47 }

 

二:将这个监听器注册到Scheduler

假设有一个任务的key是 job1与 group1

// define the job and tie it to our HelloJob class

        JobDetail job = newJob(HelloJob.class)

            .withIdentity("job1", "group1")

            .build();

 

全局注册,所有Job都会起作用

Registering A JobListener With The Scheduler To Listen To All Jobs

sched.getListenerManager().addJobListener(new MyJobListener());

 

 

指定具体的任务

Registering A JobListener With The Scheduler To Listen To A Specific Job

Matcher<JobKey> matcher = KeyMatcher.keyEquals(new JobKey("job1", "group1"));

sched.getListenerManager().addJobListener(new MyJobListener(), matcher);

 

指定一组任务 Registering A JobListener With The Scheduler To Listen To All Jobs In a Group GroupMatcher<JobKey> matcher = GroupMatcher.jobGroupEquals("group1"); sched.getListenerManager().addJobListener(new MyJobListener(), matcher);

 

可以根据组的名字匹配开头和结尾或包含

GroupMatcher<JobKey> matcher = GroupMatcher.groupStartsWith("g");

GroupMatcher<JobKey> matcher = GroupMatcher.groupContains("g");

sched.getListenerManager().addJobListener(new MyJobListener(), matcher);

 

你可能感兴趣的