quartz---的Scheduler


 

                       quartz---的Scheduler

    

  從這副圖中可以很直觀的看出來quartz的關系:

    調度:Scheduler任務調度器,是實際執行任務調度的控制器。在spring中通過SchedulerFactoryBean封裝起來。

    觸發器:Trigger 觸發器,用於定義任務調度的時間規則,有SimpleTrigger,CronTrigger,DateIntervalTrigger和NthIncludedDayTrigger,其中CronTrigger用的比較多,本文主要介紹這種方式。CronTrigger在spring中封裝在CronTriggerFactoryBean中。

   1)scheduler.start();scheduler.standby();用代碼解釋:

 1 package com.imooc.demo.helloQuartz;
 2 
 3 import java.text.SimpleDateFormat;
 4 import java.util.Date;
 5 
 6 import org.quartz.CronScheduleBuilder;
 7 import org.quartz.CronTrigger;
 8 import org.quartz.JobBuilder;
 9 import org.quartz.JobDetail;
10 import org.quartz.Scheduler;
11 import org.quartz.SchedulerException;
12 import org.quartz.SchedulerFactory;
13 import org.quartz.TriggerBuilder;
14 import org.quartz.impl.StdSchedulerFactory;
15 
16 public class HelloScheduler {
17 
18     public static void main(String[] args) throws SchedulerException, InterruptedException {
19         Date date = new Date();
20         SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
21         System.out.println("Current Time is:"+sf.format(date));
22         // 創建一個jobDatail實例,將該實力與helloJob綁定
23         JobDetail detail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob")
24                 .build();
25 
26         //美每秒觸發一次任務
27         CronTrigger trigger = (CronTrigger)TriggerBuilder
28                 .newTrigger()
29                 .withIdentity("myTrigger", "group1")
30                 //2017-2019每月的第二周的星期5下午14開始觸發,每隔5秒允許一次
31                 .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?"))
32                 .build();
33         // 創建Scheduler實例
34         SchedulerFactory factory = new StdSchedulerFactory();
35         Scheduler scheduler = factory.getScheduler();
36         scheduler.start();
37         // 把jobDetail和Trigger與scheuler綁定在一起:觸發啟動
38         System.out.println("----:"+sf.format(scheduler.scheduleJob(detail, trigger)));;
39         Thread.sleep(2000L);
40         //掛起
41         scheduler.standby();
42         
43         //scheduler掛起3秒后繼續執行
44         Thread.sleep(3000L);
45         scheduler.start();
46     }
47 }

 

    每秒執行一次,2秒后停止,執行3次后停止執行,運行結果:

 

  2)shutdown();

 

 1 package com.imooc.demo.helloQuartz;
 2 
 3 import java.text.SimpleDateFormat;
 4 import java.util.Date;
 5 
 6 import org.quartz.CronScheduleBuilder;
 7 import org.quartz.CronTrigger;
 8 import org.quartz.JobBuilder;
 9 import org.quartz.JobDetail;
10 import org.quartz.Scheduler;
11 import org.quartz.SchedulerException;
12 import org.quartz.SchedulerFactory;
13 import org.quartz.TriggerBuilder;
14 import org.quartz.impl.StdSchedulerFactory;
15 
16 public class HelloScheduler {
17 
18     public static void main(String[] args) throws SchedulerException, InterruptedException {
19         Date date = new Date();
20         SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
21         System.out.println("Current Time is:"+sf.format(date));
22         // 創建一個jobDatail實例,將該實力與helloJob綁定
23         JobDetail detail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob")
24                 .build();
25 
26         //美每秒觸發一次任務
27         CronTrigger trigger = (CronTrigger)TriggerBuilder
28                 .newTrigger()
29                 .withIdentity("myTrigger", "group1")
30                 //2017-2019每月的第二周的星期5下午14開始觸發,每隔5秒允許一次
31                 .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?"))
32                 .build();
33         // 創建Scheduler實例
34         SchedulerFactory factory = new StdSchedulerFactory();
35         Scheduler scheduler = factory.getScheduler();
36         scheduler.start();
37         // 把jobDetail和Trigger與scheuler綁定在一起:觸發啟動
38         System.out.println("----:"+sf.format(scheduler.scheduleJob(detail, trigger)));;
39         Thread.sleep(2000L);
40         //掛起
41         scheduler.shutdown();
42         
43         //scheduler掛起3秒后繼續執行
44         Thread.sleep(3000L);
45         scheduler.start();
46     }
47 }

 

運行結果為:

 

    

 

   總結 :

    在shutdown()后,程序不能再從新start().

 1 package com.imooc.demo.helloQuartz;
 2 
 3 import java.text.SimpleDateFormat;
 4 import java.util.Date;
 5 
 6 import org.quartz.CronScheduleBuilder;
 7 import org.quartz.CronTrigger;
 8 import org.quartz.JobBuilder;
 9 import org.quartz.JobDetail;
10 import org.quartz.Scheduler;
11 import org.quartz.SchedulerException;
12 import org.quartz.SchedulerFactory;
13 import org.quartz.TriggerBuilder;
14 import org.quartz.impl.StdSchedulerFactory;
15 
16 public class HelloScheduler {
17 
18     public static void main(String[] args) throws SchedulerException, InterruptedException {
19         Date date = new Date();
20         SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
21         System.out.println("Current Time is:"+sf.format(date));
22         // 創建一個jobDatail實例,將該實力與helloJob綁定
23         JobDetail detail = JobBuilder.newJob(HelloJob.class).withIdentity("myJob")
24                 .build();
25 
26         //美每秒觸發一次任務
27         CronTrigger trigger = (CronTrigger)TriggerBuilder
28                 .newTrigger()
29                 .withIdentity("myTrigger", "group1")
30                 //2017-2019每月的第二周的星期5下午14開始觸發,每隔5秒允許一次
31                 .withSchedule(CronScheduleBuilder.cronSchedule("* * * * * ?"))
32                 .build();
33         // 創建Scheduler實例
34         SchedulerFactory factory = new StdSchedulerFactory();
35         Scheduler scheduler = factory.getScheduler();
36         scheduler.start();
37         // 把jobDetail和Trigger與scheuler綁定在一起:觸發啟動
38         System.out.println("----:"+sf.format(scheduler.scheduleJob(detail, trigger)));;
39         Thread.sleep(2000L);
40         //shutdown(true)標志等待所有正在執行的job執行完之后,再關閉scheduler
41         //shutdown(false)即shutdown()表示job執行完畢之后,再關閉scheduler
42         //shutdown掛起3秒后繼續執行
43         scheduler.shutdown(true);
44         System.out.println("scheruler is shut down?:"+scheduler.isShutdown());
45 
46     }
47 }

運行結果:

  

 

總結 :

    shutdown(true)標志等待所有正在執行的job執行完之后,再關閉scheduler

 

 

總結 :
    shutdown(false)即關閉scheduler ,然后執行job之后,關掉程序

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM