我的漫漫程序之旅

          專注于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 々上善若水々 閱讀(10465) 評論(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
          主站蜘蛛池模板: 门头沟区| 延吉市| 镇雄县| 阿图什市| 广平县| 禄劝| 株洲县| 郎溪县| 沙坪坝区| 平远县| 澄城县| 怀来县| 南汇区| 新宁县| 泸州市| 中西区| 深泽县| 花莲市| 咸阳市| 隆德县| 绥德县| 元氏县| 曲阳县| 奈曼旗| 嘉祥县| 宜兴市| 文水县| 石屏县| 连平县| 农安县| 湟源县| 蓝山县| 张家口市| 大新县| 锡林浩特市| 孟连| 绥中县| 若尔盖县| 读书| 沭阳县| 星子县|