Quartz2作业监听 - Quartz教程
在本教程中,我们将展示/介绍如何创建一个JobListener,跟踪运行工作状态在作业完成等。
P.S 这个例子是Quartz 2.1.5
1. Quartz 作业
作业 - 用于打印一个简单的信息,并抛出一个JobExecutionException进行测试。
File : HelloJob.java
package com.yiibai;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job
{
    public void execute(JobExecutionContext context)
    throws JobExecutionException {
        System.out.println("Hello Quartz! - by yiibai.com");    
        //Throw exception for testing
        throw new JobExecutionException("Testing Exception");
    }
}
2. JobListener
创建一个JobListener,只是实现了JobListener接口,并覆盖所有的接口的方法。
File : HelloJobListener.java
package com.yiibai.quartz.listener;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;
public class HelloJobListener implements JobListener {
    public static final String LISTENER_NAME = "dummyJobListenerName";
    @Override
    public String getName() {
        return LISTENER_NAME; //must return a name
    }
    // Run this if job is about to be executed.
    @Override
    public void jobToBeExecuted(JobExecutionContext context) {
        String jobName = context.getJobDetail().getKey().toString();
        System.out.println("jobToBeExecuted");
        System.out.println("Job : " + jobName + " is going to start...");
    }
    // No idea when will run this?
    @Override
    public void jobExecutionVetoed(JobExecutionContext context) {
        System.out.println("jobExecutionVetoed");
    }
    //Run this after job has been executed
    @Override
    public void jobWasExecuted(JobExecutionContext context,
            JobExecutionException jobException) {
        System.out.println("jobWasExecuted");
        String jobName = context.getJobDetail().getKey().toString();
        System.out.println("Job : " + jobName + " is finished...");
        if (!jobException.getMessage().equals("")) {
            System.out.println("Exception thrown by: " + jobName
                + " Exception: " + jobException.getMessage());
        }
    }
}
注意: 不知道什么是“jobExecutionVetoed”,并会在何时触发?
3. CronTrigger
例如上面HelloJobListener连接到调度和监控作业的状态。
File : CronTriggerExample.java
package com.yiibai.quartz;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.KeyMatcher;
import com.yiibai.quartz.listener.HelloJobListener;
public class CronTriggerExample {
    public static void main( String[] args ) throws Exception
    {
    JobKey jobKey = new JobKey("dummyJobName", "group1");
        JobDetail job = JobBuilder.newJob(HelloJob.class)
        .withIdentity(jobKey).build();
        Trigger trigger = TriggerBuilder
        .newTrigger()
        .withIdentity("dummyTriggerName", "group1")
        .withSchedule(
            CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
        .build();
        Scheduler scheduler = new StdSchedulerFactory().getScheduler();
        //Listener attached to jobKey
        scheduler.getListenerManager().addJobListener(
            new HelloJobListener(), KeyMatcher.keyEquals(jobKey)
        );
        //Listener attached to group named "group 1" only.
        //scheduler.getListenerManager().addJobListener(
        //    new HelloJobListener(), GroupMatcher.jobGroupEquals("group1")
        //);
        scheduler.start();
        scheduler.scheduleJob(job, trigger);
    }
}
运行CronTriggerExample.java, 这里是输出结果:
jobToBeExecuted
Job : group1.dummyJobName is going to start...
Hello Quartz! - by yiibai.com
jobWasExecuted
Job : group1.dummyJobName is started and finished...
Exception thrown by: group1.dummyJobName Exception: Testing Exception
jobToBeExecuted
Job : group1.dummyJobName is going to start...
Hello Quartz! - by yiibai.com
jobWasExecuted
Job : group1.dummyJobName is started and finished...
Exception thrown by: group1.dummyJobName Exception: Testing Exception
以下代码下载地址:http://pan.baidu.com/s/1pJ6xiwb