`
baobeituping
  • 浏览: 1068412 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Quartz 监听器的应用

阅读更多

当我在项目中用到任务调用的时候,有必要在每次调用任务和任务出现错误的时候有详细的记录过程。在这个时候我想到了监听器的使用。

 

Quartz实现自己的JobListener和TriggerListener

我们是能对Job和Trigger创建自己的监听器的.

MyTriggerListener:
package com;

import org.quartz.JobExecutionContext;
import org.quartz.Trigger;
import org.quartz.TriggerListener;
/** *//**
 * 
 * 
@author zdw
 *
 
*/

public class MyTriggerListener implements TriggerListener
{

    
public String getName()
    
{
        
return "myTriggerListener";
    }


    
public void triggerComplete(Trigger trigger, JobExecutionContext jeContext,
            
int arg2)
    
{
        System.out.println(
"triggerName:" + trigger.getName());
        System.out.println(
"complete");
    }


    
public void triggerFired(Trigger arg0, JobExecutionContext arg1)
    
{
        System.out.println(
"fire");
        System.out.println(
"trigger" + arg0.getGroup());
    }


    
public void triggerMisfired(Trigger arg0)
    
{
        System.out.println(
"triggerMisfired");
    }


    
public boolean vetoJobExecution(Trigger arg0, JobExecutionContext arg1)
    
{
        System.out.println(
"vetoJobException");
        
return false;
    }


}

MyJobDetailListener:
package com;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;
/** *//**
 * 
 * 
@author zdw
 *
 
*/

public class MyJobDetailListener implements JobListener
{
    
/** *//**
     * 注意name是必须的
     
*/

    
public String getName()
    
{
        
return "myJobListener";
    }


    
public void jobExecutionVetoed(JobExecutionContext arg0)
    
{
        System.out.println(
"jobExceution");
    }


    
public void jobToBeExecuted(JobExecutionContext arg0)
    
{
        System.out.println(
"jobTobeExecuted");
    }


    
public void jobWasExecuted(JobExecutionContext arg0,
            JobExecutionException arg1)
    
{
        System.out.println(
"job was executed");
    }


}

上面两个类只要注意name是必须的就可以了.
package com;

import java.util.Date;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;

/** *//**
 * 
 * 
@author zdw
 * 
 
*/

public class QuartzTest
{

    
public static void main(String args[])
    
{
        
// 得到可用客户端处理调度程序的工厂
        SchedulerFactory schedFact = new StdSchedulerFactory();
        
// 高度程序接口,控制JobDeail和Trigger
        try
        
{
            Scheduler sched 
= schedFact.getScheduler();
            
// 表示给定工作类的详细信息
            JobDetail jobDetail = new JobDetail("myJb"null, StringTest.class);
            
// 也可以分别设置
            jobDetail.setName("angel");
            jobDetail.setGroup(
"007");
            jobDetail.setJobClass(StringTest.
class);
            jobDetail.getJobDataMap().put(
"jobSays""I will be success!!");
            
// 触发器
            Trigger trigger = TriggerUtils.makeSecondlyTrigger();
            
// 设置开始时间,这时设置的是每一秒执行一次
            trigger.setStartTime(TriggerUtils
                    .getEvenSecondDateBefore(
new Date()));
            
// 必须设置,不能为空
            trigger.setName("firstTrigger");
            
// 使用自己的监听器
            MyTriggerListener triggerListener = new MyTriggerListener();
            sched.addTriggerListener(triggerListener);
            sched.addJobListener(
new MyJobDetailListener());
            
// 匹配(必须操作)
            trigger.addTriggerListener("myTriggerListener");
            jobDetail.addJobListener(
"myJobListener");
            
// 为调度程序设置具体工作和触发器
            sched.scheduleJob(jobDetail, trigger);
            
// fire
            sched.start();
        }
 catch (SchedulerException e)
        
{
            e.printStackTrace();
        }

    }

}


注意:
// 匹配(必须操作)
            trigger.addTriggerListener("myTriggerListener");
            jobDetail.addJobListener(
"myJobListener");
这两步是必须的,官方文档没有提及,而且必须在scheduler添加完相应的监听器之后.
这时我们看到输出:
vetoJobException
jobTobeExecuted
execute at Fri May 
09 09:24:11 CST 2008
instName:angel  instGroup:
007 jobSays:I will be success!!
job was executed
triggerName:firstTrigger
complete
fire
triggerDEFAULT
vetoJobException
jobTobeExecuted
execute at Fri May 
09 09:24:12 CST 2008
instName:angel  instGroup:
007 jobSays:I will be success!!
job was executed
triggerName:firstTrigger
complete


我们自己的监听器已经被执行了.
分享到:
评论

相关推荐

    java监听器+quartz实现每天动态时间执行任务的功能

    这个项目“java监听器+quartz实现每天动态时间执行任务的功能”是结合了Java的监听器机制和Quartz定时任务框架来完成这样的需求。下面将详细解释这两个关键知识点。 **Java监听器** Java监听器是Java AWT和Swing库...

    quartz quartz-1.8.6 dbTables 建表sql

    6. **QRTZ_JOB_LISTENERS** 和 **QRTZ_TRIGGER_LISTENERS**:这两个表用于跟踪作业和触发器的监听器,监听器可以在作业执行前后执行自定义逻辑。 7. **QRTZ_calendars**:此表用于存储日历对象,这些对象可以用来...

    Quartz 定时任务web使用

    - 使用Quartz的`SchedulerListener`和`JobListener`可以监听调度和任务执行的事件。 6. **源码分析** - 深入研究Quartz的源码,有助于理解其内部工作原理,如JobStore的实现(内存、数据库等)、调度算法等,这有...

    quartz-2.2.3版本的quartz初始化sql语句

    6. 创建`QRTZ_TRIGGER_LISTENERS`和`QRTZ_JOB_LISTENERS`表,记录触发器和作业的监听器。 7. 创建`QRTZ_FIRED_TRIGGERS`和`QRTZ_PAUSED_TRIGGER_GRPS`表,用于跟踪已触发的触发器和暂停的触发器组。 在使用Quartz ...

    Quartz作业调度器

    Quartz作业调度器是一款强大的开源任务调度框架,广泛应用于Java应用程序中,用于执行定时和周期性的任务。在与Spring框架整合后,它能够提供更加灵活和便捷的任务调度能力,极大地扩展了Spring的功能。 Quartz的...

    quartz集群完整应用实例

    Quartz的核心概念包括Job(任务)、Trigger(触发器)和Scheduler(调度器)。Job是执行的具体任务,Trigger定义了任务何时运行,而Scheduler负责管理和执行这些任务。在单机环境下,Quartz已经足够强大,但当需要高...

    quartz使用例子

    在本篇讲解中,我们从代码示例出发,详细分析了如何使用Quartz进行任务调度,包括Job的定义、Trigger的配置以及自定义监听器的实现,希望能帮助读者更好地理解和应用Quartz。 以上内容覆盖了给定文件中标题和描述所...

    Quartz定时器web应用

    可以使用`ServletContextListener`监听器在Web应用启动时启动Scheduler,在停止时停止。 ```java @WebListener public class QuartzInitializer implements ServletContextListener { @Override public void ...

    quartz scheduler 入门教程

    quartz scheduler 入门教程 Quartz Scheduler 是一种功能丰富、开源的任务调度程序库,可以在任何 Java 程序中使用。它可以用来创建简单或者复杂的执行次数可以达成千上万的任务。...Quartz 与很多组建和监听器通行。

    Quartz使用小结

    6. **监听器**:Quartz还支持监听器机制,如JobListener和TriggerListener,可以监听Job和Trigger的生命周期事件,例如执行开始、结束、异常等,以便进行日志记录或者异常处理。 7. **并发与集群**:Quartz支持多...

    quartz实例

    6. **监听器(Listener)**:Quartz还允许添加作业监听器和触发器监听器,它们可以在作业执行前后或触发器触发时执行某些操作,提供了一种扩展点。 在你的示例项目中,可能会包含以下关键部分: - `Job`类:定义了...

    Quartz Job Scheduling Framework第7章翻译初稿

    在文档“第7章 实现Quartz监听器.doc”中,可能详细阐述了如何创建和注册这些监听器,以及它们在实际应用中的用法。通常,监听器可以通过`Scheduler`对象的`addJobListener()`, `addTriggerListener()`和`...

    quartz-2.1.7

    同时,Quartz还支持插件机制,允许开发人员添加自定义的触发器、监听器和作业存储实现。 在使用"quartz-2.1.7.jar"时,开发者需要将其引入到项目类路径中,并通过`Scheduler`实例来配置和启动调度器。配置通常涉及...

    Quartz

    - **监听器**:可以注册监听器来监控Job的状态变化,便于实现监控和报警等功能。 #### 六、Quartz的发展历程 - **创建与发展**:Quartz最初由James House创建于2001年,并于同年加入SourceForge项目。 - **...

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    内容提要:除前面用编程式使用监听器外,Quartz 还支持在 quartz_jobs.xml 中以声明式使用监听器。 第七章. 实现 Quartz 监听器 (第七部分) 内容提要:调用监听方法的线程,按什么顺序调用监听方法,最后列了一些...

    quartz 在WEB中应用小结

    通常,我们会创建一个初始化监听器(ServletContextListener)来启动Scheduler,并在Web应用关闭时停止Scheduler,以避免资源泄露。同时,我们可以使用Spring框架的Integration来简化配置和管理,将Quartz与Spring的...

    Quartz使用指南

    7. **监听器**:TriggerListener 和 JobListener 用于监听 Job 和 Trigger 的事件,例如 Job 的执行开始、结束,Trigger 的触发等。通过实现这些接口,你可以实现自定义的行为,比如日志记录、错误处理或通知机制。 ...

    quartz 定时任务调度

    Quartz调度器可以在应用启动时加载这些配置,实现定时任务的自动化执行。 4. **插件部署** TaskManager.Plugins可能指的是Quartz的插件系统,它允许扩展Quartz的功能。Quartz提供了一些内置插件,如JobStore(用于...

    Quartz定时任务持久化数据表

    6. `QRTZ_TRIGGER_LISTENERS`、`QRTZ_JOB_LISTENERS`:这两个表用于定义触发器和作业的监听器,监听器可以在触发器或作业的状态发生变化时执行自定义逻辑。 7. `QRTZ_CALENDARS`:日历表用于排除某些特定日期,例如...

Global site tag (gtag.js) - Google Analytics