胖熊熊

          得到多少又失去了什么

          Quartz使用(一)-入門使用

          很久沒有用Quartz了,居然忘記如何使用了,這里趕緊記錄下
          對Quartz就不說明了,直接上代碼
          注:這里使用的是Quartz1.5.2版本(包:quartz-1.5.2.jar)

          簡單的任務管理類


          import java.text.ParseException;
          import org.quartz.CronTrigger;
          import org.quartz.Job;
          import org.quartz.JobDetail;
          import org.quartz.Scheduler;
          import org.quartz.SchedulerException;
          import org.quartz.SchedulerFactory;
          import org.quartz.Trigger;
          import org.quartz.impl.StdSchedulerFactory;

          /**
           * @Title:Quartz管理類
           * 
           * @Description:
           * 
           * @Copyright: 
           * 
          @author zz  2008-10-8 14:19:01
           * 
          @version 1.00.000
           *
           
          */

          public class QuartzManager {
             
          private static SchedulerFactory sf = new StdSchedulerFactory();
             
          private static String JOB_GROUP_NAME = "group1";
             
          private static String TRIGGER_GROUP_NAME = "trigger1";
            
             
             
          /**
              *  添加一個定時任務,使用默認的任務組名,觸發器名,觸發器組名
              * 
          @param jobName 任務名
              * 
          @param job     任務
              * 
          @param time    時間設置,參考quartz說明文檔
              * 
          @throws SchedulerException
              * 
          @throws ParseException
              
          */

             
          public static void addJob(String jobName,Job job,String time) 
                                         
          throws SchedulerException, ParseException{
                 Scheduler sched 
          = sf.getScheduler();
                 JobDetail jobDetail 
          = new JobDetail(jobName, JOB_GROUP_NAME, job.getClass());//任務名,任務組,任務執行類
                 
          //觸發器
                 CronTrigger  trigger = 
                      
          new CronTrigger(jobName, TRIGGER_GROUP_NAME);//觸發器名,觸發器組
                 trigger.setCronExpression(time);//觸發器時間設定
                 sched.scheduleJob(jobDetail,trigger);
                 
          //啟動
                 if(!sched.isShutdown())
                    sched.start();
             }

             
             
          /**
              * 添加一個定時任務
              * 
          @param jobName 任務名
              * 
          @param jobGroupName 任務組名
              * 
          @param triggerName  觸發器名
              * 
          @param triggerGroupName 觸發器組名
              * 
          @param job     任務
              * 
          @param time    時間設置,參考quartz說明文檔
              * 
          @throws SchedulerException
              * 
          @throws ParseException
              
          */

             
          public static void addJob(String jobName,String jobGroupName,
                                       String triggerName,String triggerGroupName,
                                       Job job,String time) 
                                         
          throws SchedulerException, ParseException{
                 Scheduler sched 
          = sf.getScheduler();
                 JobDetail jobDetail 
          = new JobDetail(jobName, jobGroupName, job.getClass());//任務名,任務組,任務執行類
                 
          //觸發器
                 CronTrigger  trigger = 
                      
          new CronTrigger(triggerName, triggerGroupName);//觸發器名,觸發器組
                 trigger.setCronExpression(time);//觸發器時間設定
                 sched.scheduleJob(jobDetail,trigger);
                 
          if(!sched.isShutdown())
                    sched.start();
             }

             
             
          /**
              * 修改一個任務的觸發時間(使用默認的任務組名,觸發器名,觸發器組名)
              * 
          @param jobName
              * 
          @param time
              * 
          @throws SchedulerException
              * 
          @throws ParseException
              
          */

             
          public static void modifyJobTime(String jobName,String time) 
                                            
          throws SchedulerException, ParseException{
                 Scheduler sched 
          = sf.getScheduler();
                 Trigger trigger 
          =  sched.getTrigger(jobName,TRIGGER_GROUP_NAME);
                 
          if(trigger != null){
                     CronTrigger  ct 
          = (CronTrigger)trigger;
                     ct.setCronExpression(time);
                     sched.resumeTrigger(jobName,TRIGGER_GROUP_NAME);
                 }

             }

             
             
          /**
              * 修改一個任務的觸發時間
              * 
          @param triggerName
              * 
          @param triggerGroupName
              * 
          @param time
              * 
          @throws SchedulerException
              * 
          @throws ParseException
              
          */

             
          public static void modifyJobTime(String triggerName,String triggerGroupName,
                                              String time) 
                                            
          throws SchedulerException, ParseException{
                 Scheduler sched 
          = sf.getScheduler();
                 Trigger trigger 
          =  sched.getTrigger(triggerName,triggerGroupName);
                 
          if(trigger != null){
                     CronTrigger  ct 
          = (CronTrigger)trigger;
                     
          //修改時間
                     ct.setCronExpression(time);
                     
          //重啟觸發器
                     sched.resumeTrigger(triggerName,triggerGroupName);
                 }

             }

             
             
          /**
              * 移除一個任務(使用默認的任務組名,觸發器名,觸發器組名)
              * 
          @param jobName
              * 
          @throws SchedulerException
              
          */

             
          public static void removeJob(String jobName) 
                                         
          throws SchedulerException{
                 Scheduler sched 
          = sf.getScheduler();
                 sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME);
          //停止觸發器
                 sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME);//移除觸發器
                 sched.deleteJob(jobName,JOB_GROUP_NAME);//刪除任務
             }

             
             
          /**
              * 移除一個任務
              * 
          @param jobName
              * 
          @param jobGroupName
              * 
          @param triggerName
              * 
          @param triggerGroupName
              * 
          @throws SchedulerException
              
          */

             
          public static void removeJob(String jobName,String jobGroupName,
                                          String triggerName,String triggerGroupName) 
                                         
          throws SchedulerException{
                 Scheduler sched 
          = sf.getScheduler();
                 sched.pauseTrigger(triggerName,triggerGroupName);
          //停止觸發器
                 sched.unscheduleJob(triggerName,triggerGroupName);//移除觸發器
                 sched.deleteJob(jobName,jobGroupName);//刪除任務
             }

          }


          測試工作類
          import org.quartz.Job;
          import org.quartz.JobExecutionContext;
          import org.quartz.JobExecutionException;

          public class TestJob implements Job {

              
          public void execute(JobExecutionContext arg0) throws JobExecutionException {
                  
          // TODO Auto-generated method stub
                  System.out.println("★★★★★★★★★★★");
              }


          }

          測試類
          public class QuartzTest {

              
          /**
               * 
          @param args
               
          */

              
          public static void main(String[] args) {
                  
          // TODO Auto-generated method stub
                  TestJob job = new TestJob();
                  String job_name 
          ="11";
                  
          try {
                      System.out.println(
          "【系統啟動】");
                      QuartzManager.addJob(job_name,job,
          "0/5 * * * * ?");
                      
                      Thread.sleep(
          10000);
                      System.out.println(
          "【修改時間】");
                      QuartzManager.modifyJobTime(job_name,
          "0/10 * * * * ?");
                      Thread.sleep(
          20000);
                      System.out.println(
          "【移除定時】");
                      QuartzManager.removeJob(job_name);
                      Thread.sleep(
          10000);
                      
                      System.out.println(
          "\n【添加定時任務】");
                      QuartzManager.addJob(job_name,job,
          "0/5 * * * * ?");
                      
                  }
            catch (Exception e) {
                      e.printStackTrace();
                  }

              }

          }

          posted on 2008-10-08 15:40 fatbear 閱讀(15363) 評論(8)  編輯  收藏 所屬分類: JAVA

          評論

          # re: Quartz使用(一)-入門使用 2009-04-15 09:13 lynn169

          寫的很好,還有一種情況,如果一個任務修改了,怎么辦,一定要先刪除再重新添加一個任務嗎  回復  更多評論   

          # re: Quartz使用(一)-入門使用 2009-04-15 16:55 fatbear

          @lynn169
          要看此任務執行的內容是如何實現的
          1.任務執行內容是通過編碼實現
          這種情況通過類重載后,需要刪除再重新添加
          2.任務執行內容是通過調用其他實現的(如數據庫存儲過程或web services服務等)
          這種情況是不用刪除再重新添加
            回復  更多評論   

          # re: Quartz使用(一)-入門使用 2009-04-23 18:00 asd

          asda   回復  更多評論   

          # re: Quartz使用(一)-入門使用 2009-04-23 18:12 asd

          樓主好,
          樓主的程序我已試過,在修改時間后,新的時間并沒有馬上有效,而是要等到在舊的時間觸發后才能在新的時間觸發任務,我改了一點測試條件:
          System.out.println("start time");
          QuartzManager.addJob(job_name, job, "0,10,20,30,40,50 * * * * ?");
          Thread.sleep(10000);

          System.out.println("modify time");
          QuartzManager.modifyJobTime(job_name, "5,15,25,35,55,45 * * * * ?");
          結果像這樣:
          start time
          $$$Thu Apr 23 18:03:30 CST 2009
          modify time
          $$$Thu Apr 23 18:03:40 CST 2009 //還是舊的時間規則。
          $$$Thu Apr 23 18:03:45 CST 2009
          $$$Thu Apr 23 18:03:55 CST 2009
          $$$Thu Apr 23 18:04:05 CST 2009

          可我想得到像這樣的結果:
          start time
          $$$Thu Apr 23 18:03:30 CST 2009
          modify time
          $$$Thu Apr 23 18:03:35 CST 2009
          //希望新的時間規則能立即生效,如果第35秒已過,希望下次觸發事件是第45秒
          $$$Thu Apr 23 18:03:45 CST 2009
          $$$Thu Apr 23 18:03:55 CST 2009
          $$$Thu Apr 23 18:04:05 CST 2009
          望樓主賜教,謝謝?這是否是quartz的內部機制?  回復  更多評論   

          # re: Quartz使用(一)-入門使用 2009-09-28 17:27 EricLee

          哥們,你這個代碼,修改時間并沒有發生變化呢,我在測試你的代碼的時候,同時查看數據庫,在修改時間的時候,數據庫一直沒有改變!!!  回復  更多評論   

          # re: Quartz使用(一)-入門使用[未登錄] 2010-01-20 17:02 roger

          確實,modifyJobTime()方法根本就不起作用  回復  更多評論   

          # re: Quartz使用(一)-入門使用[未登錄] 2011-09-08 09:57 zy

          坑爹  回復  更多評論   

          # re: Quartz使用(一)-入門使用 2014-05-17 23:04 zuidaima

          java quartz代碼下載:http://www.zuidaima.com/share/search.htm?key=quartz  回復  更多評論   

          主站蜘蛛池模板: 哈巴河县| 治多县| 临海市| 海安县| 禹州市| 崇礼县| 湟中县| 夏津县| 卫辉市| 中西区| 内黄县| 菏泽市| 鲁山县| 那曲县| 潍坊市| 定结县| 晋州市| 依安县| 丰城市| 溆浦县| 阳西县| 义乌市| 海晏县| 通江县| 莱阳市| 柳林县| 寿阳县| 萨迦县| 莱芜市| 铁岭县| 涟源市| 庄河市| 迁安市| 永春县| 叶城县| 洪泽县| 綦江县| 喀喇沁旗| 湖北省| 堆龙德庆县| 黄龙县|