Quartz基本使用,Quartz使用

來源:互聯網
上載者:User

Quartz基本使用,Quartz使用

1.Quartz概述:簡單的說就是java的一個定時任務的架構,沒有那麼複雜的解釋,跟前端的定時器一樣。在瞭解它之前,首先熟悉幾個概念。

2.基本概念

2.1 Job:表示一個工作,要執行的具體內容。此介面中只有一個方法      void execute(JobExecutionContext context)

2.2 JobDetail:JobDetail 表示一個具體的可執行檔發送器, Job 是這個可執行程發送器所要執行的內容,另外 JobDetail 還包含了這個任務調度的方案和策略。

2.3 Trigger 代表一個調度參數的配置,什麼時候去調。

2.4  Scheduler 代表一個調度容器,一個調度容器中可以註冊多個 JobDetail 和 Trigger。當Trigger 與 JobDetail 組合,就可以被 Scheduler 容器調度了。

解釋:
l 編寫 job 實現業務,要做什麼具體事情問題。
l 使用 JobDetail 封裝 job,是任務對象,可以被調度
l 使用 Trigger (觸發器對象)定製什麼時候去調用某任務對象。
l 使用 Scheduler 結合任務對象和觸發器對象,很像一個大管家。

3.運行原理

1、scheduler 是一個計劃調度器容器(總部),容器裡面可以盛放眾多的 JobDetail 和 trigger,
當容器啟動後,裡面的每個 JobDetail 都會根據 trigger 按部就班自動去執行。
2、 JobDetail 是一個可執行檔工作,它本身可能是有狀態的。
3、 Trigger 代表一個調度參數的配置,什麼時候去調。
4、當 JobDetail 和 Trigger 在 scheduler 容器上註冊後,形成了裝配好的作業(JobDetail 和
Trigger 所組成的一對兒),就可以伴隨容器啟動而調度執行了。
5、 scheduler 是個容器,容器中有一個線程池,用來並行調度執行每個作業,這樣可以提
高容器效率

3.案例:
3.1簡單任務

3.1.1:引入相關的jar包

3.1.2:編寫相關的任務

代碼如下:

 1 package cn.itcast.test; 2  3 import org.junit.Test; 4 import org.quartz.JobBuilder; 5 import org.quartz.JobDetail; 6 import org.quartz.Scheduler; 7 import org.quartz.SchedulerException; 8 import org.quartz.SimpleScheduleBuilder; 9 import org.quartz.Trigger;10 import org.quartz.TriggerBuilder;11 import org.quartz.impl.StdSchedulerFactory;12 13 import cn.itcast.service.HelloJob;14 15 public class Testquartz {16     17 //    簡單任務測試18     @Test19     public void testSimpleTask(){20         21           try {22     23               Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();24               scheduler.start();25 26               // define the job and tie it to our HelloJob class27               JobDetail job = JobBuilder.newJob(HelloJob.class)28                   .withIdentity("job1", "group1")29                   .build();30 31               // Trigger the job to run now, and then repeat every 40 seconds32               Trigger trigger = TriggerBuilder.newTrigger()33                   .withIdentity("trigger1", "group1")34                   .startNow()35                         .withSchedule(SimpleScheduleBuilder.simpleSchedule()36                           .withIntervalInSeconds(3)37                           .repeatForever())            38                   .build();39 40               // Tell quartz to schedule the job using our trigger41               scheduler.scheduleJob(job, trigger);42               43             //不讓junit終止jvm44               while(true){45                   46               }47 48           } catch (SchedulerException se) {49               se.printStackTrace();50           }51     }52     53 }
View Code

3.1.3:計劃任務

和簡單任務相比,主要區別是策略不同

 1 public class QuartzTest { 2      3 //    複雜任務  4     @Test 5     public void testCronTrigger() throws SchedulerException{ 6 //        擷取調度器 7         Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); 8          9 //        開啟大管家10         scheduler.start();11         12          // define the job and tie it to our HelloJob class13           JobDetail job = JobBuilder.newJob(HelloQuartz.class)14               .withIdentity("job1", "group1")15               .build();16 17           // Trigger the job to run now, and then repeat every 40 seconds18           Trigger trigger = TriggerBuilder.newTrigger()19               .withIdentity("trigger1", "group1")20               .startNow()21 //              每隔5秒執行22                     .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * ? * *"))            23               .build();24 25           // Tell quartz to schedule the job using our trigger26           scheduler.scheduleJob(job, trigger);27         28 //        終止JVM執行29         while(true){30             31         }32         33     } 
View Code

 本測試使用的jar包:

 1     <dependencies> 2         <dependency> 3             <groupId>org.quartz-scheduler</groupId> 4             <artifactId>quartz</artifactId> 5             <version>2.2.3</version> 6         </dependency> 7         <dependency> 8             <groupId>org.quartz-scheduler</groupId> 9             <artifactId>quartz-jobs</artifactId>10             <version>2.2.3</version>11         </dependency>12         <!-- slf4j log4j -->13         <dependency>14             <groupId>org.slf4j</groupId>15             <artifactId>slf4j-log4j12</artifactId>16             <version>1.7.7</version>17         </dependency>18     <dependency>19             <groupId>junit</groupId>20             <artifactId>junit</artifactId>21             <version>4.11</version>22             <scope>test</scope>23         </dependency>24     </dependencies>
View Code

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.