15.SpringBoot2整合Quartz2-自定义Job监听器

Quartz 可以为定时任务配置JobListener, 当Job触发时,可以在Job执行前后做一些操作, 这一点儿类似于Spring的AOP编程. 和SchedulerListener类似, quartz2.x 也不支持对JobListener进行持久化, 所以每次项目启动也需要重新注册监听器. 和SchedulerListener不同的是JobListener 可以监听一到多个Job, 可以按JobKey精确匹配, 也可以按Group 模糊匹配.

1. 自定义JobListener

笔者自定义HelloJobListener 监听器

/**
 * @Description: 自定义JobListener
 * @author: zongf
 * @date: 2019-04-12 16:05
 */
public class HelloJobListener extends JobListenerSupport {

    Logger logger = LoggerFactory.getLogger(getClass());

    @Override
    public String getName() {
        return getClass().getName();
    }

    @Override
    public void jobToBeExecuted(JobExecutionContext context) {
        String jobKey = context.getJobDetail().getKey().toString();
        logger.info("定时任务:{}-开始执行",jobKey);
    }

    @Override
    public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
        String jobKey = context.getJobDetail().getKey().toString();
        logger.info("定时任务:{}-执行结束",jobKey);
    }
}

2. 注册JobListener

  • 笔者采取JobKey精确匹配模式, 只让HelloJobListener监听HelloJob 定时任务的执行
  • 添加Listener时, 如果不指定Matcher时, 默认会监听所有Job
// 会向spring容器中新增一个beanName为scheduler的Scheduler, 此时容器中变有了两个Scheduler
@Bean
public Scheduler scheduler(Scheduler scheduler) throws Exception {
    // 添加Scheduler 监听器
    scheduler.getListenerManager().addSchedulerListener(new MySchedulerListener());

    // 添加JobListener, 精确匹配JobKey
    KeyMatcher<JobKey> keyMatcher = KeyMatcher.keyEquals(JobKey.jobKey("helloJob", "group1"));
    scheduler.getListenerManager().addJobListener(new HelloJobListener(), keyMatcher);

    return scheduler;
}

3. 控制台输出

测试时, 最好禁止并发,并将HelloJob中的线程休眠取消.这样更容易看出效果

[2019-04-12 16:41:03:020][MyScheduler_Worker-1][INFO ][o.z.l.q.l.listener.HelloJobListener]- 定时任务:group1.helloJob-开始执行
2019-04-12T16:41:03.028-org.zongf.learn.quartz.l021.jobs.HelloTask-1-hello-start
2019-04-12T16:41:03.028-org.zongf.learn.quartz.l021.jobs.HelloTask-1-hello-ended
[2019-04-12 16:41:03:028][MyScheduler_Worker-1][INFO ][o.z.l.q.l.listener.HelloJobListener]- 定时任务:group1.helloJob-执行结束

你可能感兴趣的:(quartz,quartz,2.x)