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具体了解其中方法

  • 相关阅读:
    无聊死了,救我
    人间奇事:什么都涨,就工资不涨
    关于Javascript Hijacking
    参考答案:关注成本和投资回报率
    IE中一个值得关注的JS问题
    100%高度的div(转载)
    维基百科开放拉
    乱弹:出名、中医、程序
    Javascript的for...in语句在IE和Firefox的差异
    真实案例:给所有想要创业的朋友的一个管理方面的测试题
  • 原文地址:https://www.cnblogs.com/a757956132/p/4552595.html
Copyright © 2011-2022 走看看