zoukankan      html  css  js  c++  java
  • Quartz定时任务学习(九)Quartz监听器

    Quartz 提供了三种类型的监听器:监听 Job 的,监听 Trigger 的,和监听 Scheduler 自已的。

    本章解释如何应用每一种类型来更好的管理你的 Quartz 应用,并获悉到什么事件正在发生。,实现监听器的方法通用于所有的三种类型。可以分成以下步骤:


    1. 创建一个 Java 类,实现监听器接口
    2. 用你的应用中特定的逻辑实现监听器接口的所有方法
    3. 注册监听器

    JobListener 和 TriggerListener 可被注册为全局或非全局监听器。一个全局监听器能接收到所有的 Job/Trigger 的事件通知。而一个非全局监听器(或者说是一个标准的监听器) 只能接收到那些在其上已注册了监听器的 Job 或 Triiger 的事件。

    一、 监听 Job 事件


    org.quartz.JobListener 接口包含一系列的方法,它们会由 Job 在其生命周期中产生的某些关键事件时被调用。JobListener分为全局监听和局部监听,具体实现如下:

    全局:JobListener jobListener = new SimpleJobListener("SimpleJobListener");         
          scheduler.addGlobalJobListener(jobListener);         
          scheduler.start();

    局部:JobListener jobListener =new SimpleJobListener("SimpleJobListener");            
          scheduler.addJobListener(jobListener);                    
          jobDetail.addJobListener(jobListener.getName());               
          scheduler.scheduleJob(jobDetail, trigger);           
          scheduler.start();

    注意注册的方法,另外对于非全局的 JobListener,它应于任何引用到它的 JobDetail 使用 schedulerJob() 或 addJob() 方法注册之前被注册。

    二、监听 Trigger 事件

    org.quartz.TriggerListener 接口也包含一系列给 Scheduler 调用的方法。然而,与 JobListener 有所不同的是,TriggerListener 接口还有关于 Trigger 实例生命周期的方法。

    监听的实现和job的监听基本差不多,对于全局和局部说明:

    scheduler.addGlobalTriggerListener(new SimpleMyTriggerListener()); 和

    scheduler.addTriggerListener( triggerListener );

    对于局部监听要注意是的对特定的trigger.addTriggerListener( triggerListener.getName() );

    添加监听,注意名字要监听器的名称要相同。

    和非全局的 JobListener 提到的相同的警告可以应用到这里来;你必须在把它设置给 Trigger 实例并存储了 Trigger 之前把TriggerListener 加入到 Scheduler 中。

    三、 监听 Scheduler 事件

    org.quartz.SchedulerListener 接口包含了一系列的回调方法,它们会在 Scheduler 的生命周期中有关键事件发生时被调用。

    public void startScheduler() throws SchedulerException {          
    Scheduler scheduler = null;          
    scheduler = StdSchedulerFactory.getDefaultScheduler();          
    //添加监听
    SchedulerListener schedulerListener = new SimpleSchedulerListener();         
    scheduler.addSchedulerListener(schedulerListener);         
    scheduler.start();         
    //注册作业和触发器        
    JobDetail jobDetail = new JobDetail("PrintInfoJob",Scheduler.DEFAULT_GROUP, MyJob.class);          
    Trigger trigger = TriggerUtils.makeSecondlyTrigger(5);          
    trigger.setName("SimpleTrigger");         
    trigger.setStartTime(new Date());          
    scheduler.scheduleJob(jobDetail, trigger);      

    在代码中,Scheduler 创建后是在 Job 注册之前被启动的。这就使得在 Job 部署时 jobScheduled() 方法能得到调用。我们也改变了 Trigger 只重复两次而不是无限的运行。这样能强制 triggerFinalized() 方法被调用,因为这个 Trigger 不再有机会触发了。除了这些人为的条件外,使用 SchedulerListener 就和使用 Job 或 Trigger 监听器是一样的了。

    关于监听类可以查考API具体了解其中方法

  • 相关阅读:
    【codecombat】 试玩全攻略 第二章 边远地区的森林 一步错
    【codecombat】 试玩全攻略 第十八关 最后的kithman族
    【codecombat】 试玩全攻略 第二章 边远地区的森林 woodlang cubbies
    【codecombat】 试玩全攻略 第二章 边远地区的森林 羊肠小道
    【codecombat】 试玩全攻略 第十七关 混乱的梦境
    【codecombat】 试玩全攻略 第二章 边远地区的森林 林中的死亡回避
    【codecombat】 试玩全攻略 特别关:kithguard斗殴
    【codecombat】 试玩全攻略 第二章 边远地区的森林 森林保卫战
    【codecombat】 试玩全攻略 第二章 边远地区的森林
    实验3 类和对象||
  • 原文地址:https://www.cnblogs.com/a757956132/p/4552595.html
Copyright © 2011-2022 走看看