我的漫漫程序之旅

专注于JavaWeb开发
随笔 - 39, 文章 - 310, 评论 - 411, 引用 - 0
数据加载中……

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


我们自己的监听器已经被执行了.

posted on 2008-05-09 09:25 々上善若水々 阅读(10366) 评论(4)  编辑  收藏 所属分类: opensource

评论

# re: Quartz实现自己的JobListener和TriggerListener  回复  更多评论   

Unable to notify JobListener(s) of Job to be executed:

这个错误怎么解决
2008-12-23 13:55 | juzhiQQ80224632

# re: Quartz实现自己的JobListener和TriggerListener  回复  更多评论   

juzhi
QQ80224632


帮我解决一下
2008-12-23 13:57 | juzhiQQ80224632

# re: Quartz实现自己的JobListener和TriggerListener  回复  更多评论   

..如果我重启web容器 监听是不是都清空了哦?
2008-12-23 15:02 | juzhiQQ80224632

# re: Quartz实现自己的JobListener和TriggerListener  回复  更多评论   

经过我的测试在JobDeatil中加入JobListener,服务重启的时候也必须再Scheduler 中重新注册你使用的监听器,我就是直接修改了org.quartz.ee.servlet.QuartzInitializerServlet
2010-01-07 15:03 | ww

只有注册用户登录后才能发表评论。


网站导航: