<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發(fā)
    隨筆 - 39, 文章 - 310, 評(píng)論 - 411, 引用 - 0
    數(shù)據(jù)加載中……

    Quartz實(shí)現(xiàn)自己的JobListener和TriggerListener

    我們是能對(duì)Job和Trigger創(chuàng)建自己的監(jiān)聽器的.

    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");
        }


    }

    上面兩個(gè)類只要注意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[])
        
    {
            
    // 得到可用客戶端處理調(diào)度程序的工廠
            SchedulerFactory schedFact = new StdSchedulerFactory();
            
    // 高度程序接口,控制JobDeail和Trigger
            try
            
    {
                Scheduler sched 
    = schedFact.getScheduler();
                
    // 表示給定工作類的詳細(xì)信息
                JobDetail jobDetail = new JobDetail("myJb"null, StringTest.class);
                
    // 也可以分別設(shè)置
                jobDetail.setName("angel");
                jobDetail.setGroup(
    "007");
                jobDetail.setJobClass(StringTest.
    class);
                jobDetail.getJobDataMap().put(
    "jobSays""I will be success!!");
                
    // 觸發(fā)器
                Trigger trigger = TriggerUtils.makeSecondlyTrigger();
                
    // 設(shè)置開始時(shí)間,這時(shí)設(shè)置的是每一秒執(zhí)行一次
                trigger.setStartTime(TriggerUtils
                        .getEvenSecondDateBefore(
    new Date()));
                
    // 必須設(shè)置,不能為空
                trigger.setName("firstTrigger");
                
    // 使用自己的監(jiān)聽器
                MyTriggerListener triggerListener = new MyTriggerListener();
                sched.addTriggerListener(triggerListener);
                sched.addJobListener(
    new MyJobDetailListener());
                
    // 匹配(必須操作)
                trigger.addTriggerListener("myTriggerListener");
                jobDetail.addJobListener(
    "myJobListener");
                
    // 為調(diào)度程序設(shè)置具體工作和觸發(fā)器
                sched.scheduleJob(jobDetail, trigger);
                
    // fire
                sched.start();
            }
     catch (SchedulerException e)
            
    {
                e.printStackTrace();
            }

        }

    }


    注意:
    // 匹配(必須操作)
                trigger.addTriggerListener("myTriggerListener");
                jobDetail.addJobListener(
    "myJobListener");
    這兩步是必須的,官方文檔沒有提及,而且必須在scheduler添加完相應(yīng)的監(jiān)聽器之后.
    這時(shí)我們看到輸出:
    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


    我們自己的監(jiān)聽器已經(jīng)被執(zhí)行了.

    posted on 2008-05-09 09:25 々上善若水々 閱讀(10468) 評(píng)論(4)  編輯  收藏 所屬分類: opensource

    評(píng)論

    # re: Quartz實(shí)現(xiàn)自己的JobListener和TriggerListener  回復(fù)  更多評(píng)論   

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

    這個(gè)錯(cuò)誤怎么解決
    2008-12-23 13:55 | juzhiQQ80224632

    # re: Quartz實(shí)現(xiàn)自己的JobListener和TriggerListener  回復(fù)  更多評(píng)論   

    juzhi
    QQ80224632


    幫我解決一下
    2008-12-23 13:57 | juzhiQQ80224632

    # re: Quartz實(shí)現(xiàn)自己的JobListener和TriggerListener  回復(fù)  更多評(píng)論   

    ..如果我重啟web容器 監(jiān)聽是不是都清空了哦?
    2008-12-23 15:02 | juzhiQQ80224632

    # re: Quartz實(shí)現(xiàn)自己的JobListener和TriggerListener  回復(fù)  更多評(píng)論   

    經(jīng)過我的測(cè)試在JobDeatil中加入JobListener,服務(wù)重啟的時(shí)候也必須再Scheduler 中重新注冊(cè)你使用的監(jiān)聽器,我就是直接修改了org.quartz.ee.servlet.QuartzInitializerServlet
    2010-01-07 15:03 | ww
    主站蜘蛛池模板: 亚洲午夜无码久久久久| 女人张开腿给人桶免费视频| 久久久精品国产亚洲成人满18免费网站| 国产精品亚洲午夜一区二区三区| 3344永久在线观看视频免费首页| 亚洲午夜未满十八勿入| 亚洲高清视频免费| 亚洲伊人久久精品| 巨胸喷奶水视频www网免费| 亚洲中文字幕一二三四区 | 老司机精品免费视频| 亚洲精品高清一二区久久| 一级毛片高清免费播放| 在线精品亚洲一区二区小说| 十八禁在线观看视频播放免费| 国产av天堂亚洲国产av天堂| 最近2019免费中文字幕6| 波多野结衣亚洲一级| 国产免费观看黄AV片| 国产精品福利在线观看免费不卡| 亚洲精品V欧洲精品V日韩精品| 95老司机免费福利| 男人天堂2018亚洲男人天堂 | 免费一级特黄特色大片在线观看| caoporm超免费公开视频| 亚洲成亚洲乱码一二三四区软件| 又大又硬又爽又粗又快的视频免费| 亚洲看片无码在线视频| 亚洲国产成人久久一区久久| 美女视频黄的免费视频网页| 亚洲中文字幕AV在天堂| 亚洲人成无码网WWW| 99精品在线免费观看| 亚洲第一第二第三第四第五第六| 国产亚洲精品a在线观看 | 免费看小12萝裸体视频国产| 最近更新免费中文字幕大全| 亚洲人成影院77777| 久久精品夜色噜噜亚洲A∨| 成人免费大片免费观看网站| 免费精品国自产拍在线播放|