Java 定時任務 Quartz (一)—— 初識

1 寫在前面

最近公司的業務須要用到定時任務,框架選型用的是 Quartz ,這裏做學習記錄。框架

2 Quartz 主要成員

Quartz 的核心由大接口組成,分別是 JobTriggerScheduleride

2.1 Job

描述執行具體的任務,其結構與 Runnable 相似,只有一個 void 類型的方法 execute(JobExecutionContext context),它還有一個子類  InterruptableJob,表示一個可終止的任務學習

2.1.1 InterruptableJob 

在 Job 的基礎只添加了一個 void 類型的方法 interrupt() ,用於終止任務,它的調用發生在在 QuartzScheduler#shutdown(boolean) 中,這要求咱們須要像編寫一個可終止的的 Runnable 同樣編寫 execute 方法。ui

2.2 Trigger

用來描述一個 Job 的 execute 方法什麼時候執行spa

2.3 Scheduler

相似隊列與線程池,存放各類 Job 的信息與 Trigger ,管理任務的添加,移除,替換,運行等線程

3 Quartz 的初步使用

Scheduler:做爲一個管理任務的容器,Scheduler 應該有相似線程池的提交任務與關閉池的方法:對應的添加任務方法分別爲  addJob, scheduleJob,很不巧這些方法的簽名是 JobDetailcode

JobDetail:JobDetail 有一個實現類 JobDetailImpl ,而且空構造器表示必須指定 nameclassgroup。class 是指 Job 接口的實現;group 是可選的,默認使用 default;blog

Trigger:Trigger 有多個實現類,這裏只涉及到基本實現 SimpleTriggerImpl;接口

上述的三個接口都有對應的建造類或者工廠類。隊列

3.1 一個普通的定時任務

 1 /**
 2  * @author pancc
 3  * @version 1.0
 4  */
 5 public class SimpleJobDemo {
 6     public static void main(String[] args) throws SchedulerException, InterruptedException {
 7         JobDetail detail = JobBuilder.newJob(SimpleJob.class)
 8                 .withIdentity("simple", "group0")
 9                 .build();
10 
11         Trigger trigger = TriggerBuilder.newTrigger()
12                 .withIdentity("simple_trigger")
13                 .startNow()
14                 .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(2))
15                 .build();
16 
17         Scheduler scheduler = new StdSchedulerFactory().getScheduler();
18 
19         scheduler.start();
20         scheduler.scheduleJob(detail, trigger);
21         /*
22          * 10 秒鐘後關閉
23          */
24         Thread.sleep(10_000);
25         scheduler.shutdown();
26     }
27 
28     public static class SimpleJob implements Job {
29         @Override
30         public void execute(JobExecutionContext context) {
31             System.out.printf("now date: %s", new Date());
32         }
33     }
34 
35 }

 

上邊的代碼建立了一個任務打印當前任務,而且指定它的運行開始時間爲提交的時候,而且週期爲2秒,持續永久。10 秒鐘後關閉容器。

4 任務建立中的坑

必要的屬性:JobDetail 必須有描述名,組在未設定時使用 default。

可訪問性:在通常的代碼中,咱們習慣性限制類的訪問,好比上邊的 SimpleJob 咱們可能會定義 private(意味着它的構造器也是 private 的),這在 Quartz 中是不被容許的。Job 的空構造器必須是 pubilc 的,這與後續 Quartz 的特性有關。

相關文章
相關標籤/搜索