美文网首页Quartz框架
Quartz框架(十)监听

Quartz框架(十)监听

作者: 小胖学编程 | 来源:发表于2019-09-19 18:22 被阅读0次

    Quartz框架(一)—Quartz的基本配置
    Quartz框架(二)—jobstore数据库表字段详解
    Quartz框架(三)—任务的并行/串行执行
    Quartz框架(四)—misfire处理机制
    Quartz框架(五)— 有状态的job和无状态job
    Quartz框架(六)— Trigger状态转换
    Quartz框架(七)— Quartz集群原理
    Quartz框架(八)— Quartz实现异步通知
    Quartz框架(九)— 动态操作Quartz定时任务
    Quartz框架(十)监听

    1. 概述

    Quartz的监听器用于当任务调度中关注的事件发生时,能够及时获取这一事件的通知。

    1. Quartz监听的种类:
    • JobListener:任务监听;
    • TriggerListener:触发器监听;
    • SchedulerListener:调度器监听;
    1. 监听器的作用域
    • 全局监听器:能够接收到所有的Job/Trigger的事件通知;
    • 局部监听器:只能接收在其上注册Job或者Trigger的事件;

    2. 监听器的种类

    2.1 JobListener

    源码位置:org.quartz.JobListener

    public interface JobListener {
        //获取该JobListener的名称
        String getName();
        //Scheduler在JobDetail将要被执行时调用该方法
        void jobToBeExecuted(JobExecutionContext context);
        //Scheduler在JobDetail将要被执行时,但又被TriggerListener否决调用
        void jobExecutionVetoed(JobExecutionContext context);
        //任务执行完毕调用该方法
        void jobWasExecuted(JobExecutionContext context,
                JobExecutionException jobException);
    
    }
    

    将JobListener绑定到Scheduler中:

    //监听所有的Job
    scheduler.getListenerManager().addJobListener(new SimpleJobListener(), EverythingMatcher.allJobs());
    //监听特定的Job
    scheduler.getListenerManager().addJobListener(new SimpleJobListener(), KeyMatcher.keyEquals(JobKey.jobKey("HelloWorld1_Job", "HelloWorld1_Group")));
    //监听同一任务组的Job
    scheduler.getListenerManager().addJobListener(new SimpleJobListener(), GroupMatcher.jobGroupEquals("HelloWorld2_Group"));
    //监听两个任务组的Job
    scheduler.getListenerManager().addJobListener(new SimpleJobListener(), OrMatcher.or(GroupMatcher.jobGroupEquals("HelloWorld1_Group"), GroupMatcher.jobGroupEquals("HelloWorld2_Group")));
    

    2.2 TriggerListener

    源码位置:org.quartz.TriggerListener

    触发器监听,即在任务调度过程中,与触发器Trigger相关的事件:触发器触发、触发器未正常触发、触发器触发完成等。

    public interface TriggerListener {
        //获取触发器的名字
        public String getName();
        //Job的execute()方法被调用时调用该方法。
        public void triggerFired(Trigger trigger, JobExecutionContext context);
        //Trigger触发后,TriggerListener给了一个选择否定Job的执行。假如该方法返回true,该Job将不会被触发
        public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context);
        //Trigger错过触发时间触发该方法,此方法不应该含有长时间的处理逻辑。
        public void triggerMisfired(Trigger trigger);
        //Trigger被触发并且完成Job后触发。
        public void triggerComplete(Trigger trigger, JobExecutionContext context,
                int triggerInstructionCode);
    }
    

    将TriggerListener绑定到Scheduler中:

    //监听所有的Trigger
    scheduler.getListenerManager().addTriggerListener(new SimpleTriggerListener("SimpleTrigger"), EverythingMatcher.allTriggers());
    //监听特定的Trigger
    scheduler.getListenerManager().addTriggerListener(new SimpleTriggerListener("SimpleTrigger"), KeyMatcher.keyEquals(TriggerKey.triggerKey("HelloWord1_Job", "HelloWorld1_Group")));
    //监听一组Trigger
    scheduler.getListenerManager().addTriggerListener(new SimpleTriggerListener("SimpleTrigger"), GroupMatcher.groupEquals("HelloWorld1_Group"));
    //移除监听器
    scheduler.getListenerManager().removeTriggerListener("SimpleTrigger");
    

    2.3 SchedulerListener

    源码位置:org.quartz.SchedulerListener

    SchedulerListener会在Scheduler的生命周期关键事件发生时调用。与Scheduler有关的事件包括:增加一个job/trigger,删除一个job/Trigger,scheduler发生严重错误,关闭Scheduler等。

    public interface SchedulerListener {
         //用于部署JobDetail时调用
        public void jobScheduled(Trigger trigger);
        //用于卸载JobDetail时调用
        public void jobUnscheduled(String triggerName, String triggerGroup);
        //当一个Trigger没有触发次数时调用。
        public void triggerFinalized(Trigger trigger);
    
        public void triggersPaused(String triggerName, String triggerGroup);
    
        public void triggersResumed(String triggerName, String triggerGroup);
        //当一个或一组 JobDetail 暂停时调用这个方法。
        public void jobsPaused(String jobName, String jobGroup);
        //当一个或一组 Job 从暂停上恢复时调用这个方法。假如是一个 Job 组,jobName 参数将为 null。
        public void jobsResumed(String jobName, String jobGroup);
        //在 Scheduler 的正常运行期间产生一个严重错误时调用这个方法。
        public void schedulerError(String msg, SchedulerException cause);
        //当Scheduler 开启时,调用该方法
        public void schedulerStarted();
        //当Scheduler处于StandBy模式时,调用该方法
        public void schedulerInStandbyMode();
        //当Scheduler停止时,调用该方法
        public void schedulerShutdown();
        //当Scheduler中的数据被清除时,调用该方法。
        public void schedulingDataCleared();
    }
    

    将SchedulerListener绑定到Scheduler中:

    //创建监听
    scheduler.getListenerManager().addSchedulerListener(new SimpleSchedulerListener());
    //移除监听
    scheduler.getListenerManager().removeSchedulerListener(new SimpleSchedulerListener());
    

    总结

    以监听器的种类来说,比较有价值的便是

    1. org.quartz.TriggerListener#triggerMisfired,即一些比较重要的定时,若错过触发时间(并且超过了org.quartz.jobStore.misfireThreshold = 60000单位ms,忍受时间),就可以发送邮件报警。
    2. org.quartz.JobListener#jobWasExecuted,当定时任务中抛出异常后,该方法可以获取到该异常信息,然后进行报警出来(也可以进行立即重试或者移除所有触发器操作)。

    Quartz使用(4) - Quartz监听器Listerner

    相关文章

      网友评论

        本文标题:Quartz框架(十)监听

        本文链接:https://www.haomeiwen.com/subject/vsjhjctx.html