Quartz的监听器(六)中

简介: Quartz的监听器(六)中

三. TriggerListener

三.一 接口定义

org.quartz.TriggerListener

package org.quartz;
import org.quartz.Trigger.CompletedExecutionInstruction;
public interface TriggerListener {
    String getName();
    void triggerFired(Trigger trigger, JobExecutionContext context);
    boolean vetoJobExecution(Trigger trigger, JobExecutionContext context);
    void triggerMisfired(Trigger trigger);
    void triggerComplete(Trigger trigger, JobExecutionContext context,
            CompletedExecutionInstruction triggerInstructionCode);
}


定义了五个方法


image.png


三.二 接口监听实例

三.二.一 编写自定义监听器,实现 TriggerListener 接口

MyTriggerListener.java

public class MyTriggerListener implements TriggerListener {
    @Override
    public String getName() {
       String name=this.getClass().getSimpleName();
        System.out.println("Trigger 监听器的名称是:"+name);
       return name;
    }
    @Override
    public void triggerFired(Trigger trigger, JobExecutionContext jobExecutionContext) {
        //trigger.getKey().getName();
        System.out.println("被执行前触发");
    }
    @Override
    public boolean vetoJobExecution(Trigger trigger, JobExecutionContext jobExecutionContext) {
        System.out.println("未被执行时触发");
        //如果为true, 就不往下执行了。 如果为false, 继续往下执行, 来决定  triggerComplete 是否运行
        return false;
    }
    @Override
    public void triggerMisfired(Trigger trigger) {
        System.out.println("错过执行时触发");
    }
    @Override
    public void triggerComplete(Trigger trigger, JobExecutionContext jobExecutionContext, 
    Trigger.CompletedExecutionInstruction completedExecutionInstruction) {
        System.out.println("完成时触发");
    }
}


三.二.二 编写 TriggerLisenter 监听器 Demo

public class TriggerListenerSchedularDemo {
    public static void main(String[] args) throws  Exception  {
        //获取Scheduler
        Scheduler scheduler= StdSchedulerFactory.getDefaultScheduler();
        // 创建 JobDetail
        JobDetail jobDetail=JobBuilder.newJob(MyJob.class)
                .withIdentity("job1","group1")
                .build();
        //创建 Trigger
        Trigger trigger= TriggerBuilder.newTrigger()
                .withIdentity("trigger1","group1") //设置标识
                .startNow()
                //有冲突时,以开始时间和结束时间为主,不以次数为主
                .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ? "))
                .build();
        //关联 job和 trigger
        scheduler.scheduleJob(jobDetail,trigger);
        //注册监听器
        //注册 Trigger 全局触发器
        //scheduler.getListenerManager().addTriggerListener(new MyTriggerListener(),
        //        EverythingMatcher.allTriggers());
        //注册局部
        scheduler.getListenerManager().addTriggerListener(new MyTriggerListener(),
                KeyMatcher.keyEquals(TriggerKey.triggerKey("trigger1","group1")));
        //启动 scheduler
        scheduler.start();
    }
}


三.二.三 控制台打印输出

image.png


注册执行的顺序


三.二.四 自定义 TriggerListener 名称

也可以像自定义 JobListener 的名称那样,通过构造方法自定义TriggerListener的名称, 这里就不重复讲解了。


三.二.五 将 vetoJobExecution() 方法的返回值改成 true

@Override
    public boolean vetoJobExecution(Trigger trigger, JobExecutionContext jobExecutionContext) {
        System.out.println("未被执行时触发");
        //如果为true, 就不往下执行了。 如果为false, 继续往下执行, 来决定  triggerComplete 是否运行
        return true;
    }


三.二.五.一 未注册 JobListener

此时,运行程序,控制台打印输出:


image.png


此时,并没有重复执行 MyJob 里面的 备份数据库操作,也没有执行 triggerComplete()的方法。

三.二.五.二 注册 JobListener

在TriggerListenerSchedularDemo.java 中,注册 MyJobListener 的局部监听器


vetoJobExecution() 方法的返回值仍然是 true

//注册Trigger局部
        scheduler.getListenerManager().addTriggerListener(new MyTriggerListener(),
                KeyMatcher.keyEquals(TriggerKey.triggerKey("trigger1","group1")));
//注册JobListener 局部监听器
scheduler.getListenerManager().addJobListener(new MyJobListener(),
        KeyMatcher.keyEquals(JobKey.jobKey("job1","group1")));


运行程序,控制台打印输出:

image.png

执行了 MyJobListener监听器里面的 jobExecutionVetoed() 方法。

相关文章
|
1月前
|
Java 容器
SpringBoot3 事件和监听器
SpringBoot3 事件和监听器
|
1月前
|
移动开发 前端开发 Java
Flowable 任务监听器与执行监听器的介绍
Flowable 任务监听器与执行监听器的介绍
80 0
|
Java 调度 Maven
定时任务组件Quartz
定时任务组件Quartz
定时任务组件Quartz
|
存储 Java 数据库连接
这种方式整合Quartz你见过吗?
`Quartz`是一款优秀的任务调度框架,支持内存、JDBC的形式来存储未执行的任务列表,支持多个任务节点同时执行任务,支持任务漂移到不同的节点执行。
|
调度
Quartz的监听器(六)上
Quartz的监听器(六)上
180 0
Quartz的监听器(六)上
Quartz 定时任务管理类
Quartz 定时任务管理类
151 0
|
关系型数据库 Java 数据库连接
spring框架使用Quartz执行定时任务实例详解
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/80382324 Quartz简介   1.Quartz,是一个完全由java编写的开源作业调度框架。
1156 0