16.SpringBoot2整合Quartz2-自定义Trigger监听器

Quartz 不仅可以监听Job, 还可以监听Trigger. 可以在Trigger触发前后或misfires时做一些操作. TriggerListener 和 JobListener 的创建和注册方式都比较像. 笔者就不做过多的介绍了

1. 自定义TriggerListener

/**
 * @Description: 监听HelloTrigger
 * @author: zongf
 * @date: 2019-04-12 16:30
 */
public class HelloTriggerListener extends TriggerListenerSupport {

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

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

    @Override
    public void triggerFired(Trigger trigger, JobExecutionContext context) {
        TriggerKey triggerKey = trigger.getKey();
        JobKey jobKey = context.getJobDetail().getKey();
        logger.info("触发器{}-触发定时任务:{}-开始",jobKey);
    }

    @Override
    public void triggerComplete(Trigger trigger, JobExecutionContext context, Trigger.CompletedExecutionInstruction triggerInstructionCode) {
        TriggerKey triggerKey = trigger.getKey();
        JobKey jobKey = context.getJobDetail().getKey();
        logger.info("触发器{}-触发定时任务:{}-结束",jobKey);
    }
}

2. 注册TriggerListener

  • 笔者采用分组匹配模式, 匹配trigger分组group1下所有的Trigger
  • 当添加监听器时不指定Matcher时, 默认会监听所有的触发器
// 会向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);

    // 添加TriggerListener, 按组匹配
    GroupMatcher<TriggerKey> groupMatcher = GroupMatcher.groupEquals("group1");
    scheduler.getListenerManager().addTriggerListener(new HelloTriggerListener(), groupMatcher);

    return scheduler;
}

3. 控制台输出

[2019-04-12 16:46:37:616][MyScheduler_Worker-1][INFO ][o.z.l.q.l.l.HelloTriggerListener]- 触发器group1.helloJob-触发定时任务:{}-开始
[2019-04-12 16:46:37:617][MyScheduler_Worker-1][INFO ][o.z.l.q.l.listener.HelloJobListener]- 定时任务:group1.helloJob-开始执行
2019-04-12T16:46:37.621-org.zongf.learn.quartz.l021.jobs.HelloTask-1-hello-start
2019-04-12T16:46:37.621-org.zongf.learn.quartz.l021.jobs.HelloTask-1-hello-ended
[2019-04-12 16:46:37:622][MyScheduler_Worker-1][INFO ][o.z.l.q.l.listener.HelloJobListener]- 定时任务:group1.helloJob-执行结束
[2019-04-12 16:46:37:622][MyScheduler_Worker-1][INFO ][o.z.l.q.l.l.HelloTriggerListener]- 触发器group1.helloJob-触发定时任务:{}-结束

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