胖熊熊

          得到多少又失去了什么

          Quartz使用(一)-入門使用

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

          簡單的任務(wù)管理類


          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";
            
             
             
          /**
              *  添加一個定時任務(wù),使用默認的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名
              * 
          @param jobName 任務(wù)名
              * 
          @param job     任務(wù)
              * 
          @param time    時間設(shè)置,參考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());//任務(wù)名,任務(wù)組,任務(wù)執(zhí)行類
                 
          //觸發(fā)器
                 CronTrigger  trigger = 
                      
          new CronTrigger(jobName, TRIGGER_GROUP_NAME);//觸發(fā)器名,觸發(fā)器組
                 trigger.setCronExpression(time);//觸發(fā)器時間設(shè)定
                 sched.scheduleJob(jobDetail,trigger);
                 
          //啟動
                 if(!sched.isShutdown())
                    sched.start();
             }

             
             
          /**
              * 添加一個定時任務(wù)
              * 
          @param jobName 任務(wù)名
              * 
          @param jobGroupName 任務(wù)組名
              * 
          @param triggerName  觸發(fā)器名
              * 
          @param triggerGroupName 觸發(fā)器組名
              * 
          @param job     任務(wù)
              * 
          @param time    時間設(shè)置,參考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());//任務(wù)名,任務(wù)組,任務(wù)執(zhí)行類
                 
          //觸發(fā)器
                 CronTrigger  trigger = 
                      
          new CronTrigger(triggerName, triggerGroupName);//觸發(fā)器名,觸發(fā)器組
                 trigger.setCronExpression(time);//觸發(fā)器時間設(shè)定
                 sched.scheduleJob(jobDetail,trigger);
                 
          if(!sched.isShutdown())
                    sched.start();
             }

             
             
          /**
              * 修改一個任務(wù)的觸發(fā)時間(使用默認的任務(wù)組名,觸發(fā)器名,觸發(fā)器組名)
              * 
          @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);
                 }

             }

             
             
          /**
              * 修改一個任務(wù)的觸發(fā)時間
              * 
          @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);
                     
          //重啟觸發(fā)器
                     sched.resumeTrigger(triggerName,triggerGroupName);
                 }

             }

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

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

             
             
          /**
              * 移除一個任務(wù)
              * 
          @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);
          //停止觸發(fā)器
                 sched.unscheduleJob(triggerName,triggerGroupName);//移除觸發(fā)器
                 sched.deleteJob(jobName,jobGroupName);//刪除任務(wù)
             }

          }


          測試工作類
          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(
          "【系統(tǒng)啟動】");
                      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【添加定時任務(wù)】");
                      QuartzManager.addJob(job_name,job,
          "0/5 * * * * ?");
                      
                  }
            catch (Exception e) {
                      e.printStackTrace();
                  }

              }

          }

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

          評論

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

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

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

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

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

          asda   回復(fù)  更多評論   

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

          樓主好,
          樓主的程序我已試過,在修改時間后,新的時間并沒有馬上有效,而是要等到在舊的時間觸發(fā)后才能在新的時間觸發(fā)任務(wù),我改了一點測試條件:
          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 * * * * ?");
          結(jié)果像這樣:
          start time
          $$$Thu Apr 23 18:03:30 CST 2009
          modify time
          $$$Thu Apr 23 18:03:40 CST 2009 //還是舊的時間規(guī)則。
          $$$Thu Apr 23 18:03:45 CST 2009
          $$$Thu Apr 23 18:03:55 CST 2009
          $$$Thu Apr 23 18:04:05 CST 2009

          可我想得到像這樣的結(jié)果:
          start time
          $$$Thu Apr 23 18:03:30 CST 2009
          modify time
          $$$Thu Apr 23 18:03:35 CST 2009
          //希望新的時間規(guī)則能立即生效,如果第35秒已過,希望下次觸發(fā)事件是第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的內(nèi)部機制?  回復(fù)  更多評論   

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

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

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

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

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

          坑爹  回復(fù)  更多評論   

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

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

          主站蜘蛛池模板: 东兴市| 枣庄市| 定南县| 蓝田县| 汉源县| 罗田县| 黄龙县| 福鼎市| 涪陵区| 左贡县| 乌鲁木齐市| 凤凰县| 晋宁县| 卢龙县| 和林格尔县| 陇南市| 常熟市| 东港市| 苏尼特左旗| 中江县| 佛坪县| 宁陕县| 仙桃市| 崇州市| 闽清县| 博野县| 泸西县| 象山县| 前郭尔| 全南县| 西藏| 浏阳市| 紫云| 桓台县| 长海县| 广水市| 措美县| 台中县| 正蓝旗| 临清市| 竹北市|