一、任務調度概述
在企業級應用中,經常會制定一些“計划任務”,即在某個時間點做某件事情,核心是以時間為關注點,即在一個特定的時間點,系統執行指定的一個操作,任務調度涉及多線程並發、線程池維護、運行時間規則解析、運行現場的保護以恢復等方面。Quartz框架是一個開源的企業級任務調度服務,已經被作為任務調度的良好解決方案

二、Quartz框架核心概念
Quartz對任務調度進行了高度抽象,提出了3個核心概念,並在org.quartz包中通過接口和類進行了描述
任務:就是執行的工作內容。Quartz提供Job接口來支持任務定義
觸發器:定義觸發Job執行的時間觸發規則。Quartz提供Trigger類及其子類支持觸發器功能,
調度器:Quartz提供了Scheduler接口,將工作任務和觸發器綁定,保證任務可以在正確的時間執行
三、Quartz框架的使用流程
案例:
從當前時間開始執行一個特定操作
①:引入jar文件
②:創建entity實體層定義任務的模板
③:定制一個泛型集合用戶存儲多個Plan對象,提供一個方法讀取該泛型集合中的data
④:提醒業務類
⑤:真正的任務對象和觸發器對象
步驟一:

步驟二:Plan實體類,並有對應的時間和任務內容
public class Plan {
//時間
private String date;
//任務
private String task;
@Override
public String toString() {
return "Plan [date=" + date + ", task=" + task + "]";
}
public Plan() {
}
public Plan(String date, String task) {
super();
this.date = date;
this.task = task;
}
步驟三:定義Service,創建集合,遍歷
public class RemindService {
//創建一個集合,並且方法返回值是一個集合類型
public List<Plan> getPlans(){
List<Plan> list=new ArrayList<Plan>();
Plan p1=new Plan("2016年12月17日","計划一");
Plan p2=new Plan("2016年12月18日","計划二");
list.add(p1);
list.add(p2);
return list;
}
//用來打印集合中提醒內容的方法
public void printMessage(){
List<Plan> list= getPlans();
for (Plan plan : list) {
System.out.println("計划的時間:"+plan.getDate()+"\t"+"計划內容:"+plan.getTask());
}
}
}
步驟四:創建Quartz層,提醒業務類,實現Job接口,並植入Service對象

步驟五:構建Job、Trigger,並綁定Job和Trigger
public static void tool() throws Exception{
//構建Job
JobDetail job = JobBuilder.newJob(RemindJob.class)
.withIdentity("job1", "group1").build();
//構建Trigger
Date runTime = DateBuilder.evenMinuteDate(new Date(System.currentTimeMillis()));
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.startAt(runTime).build();
//綁定Job和Trigger
//創建調度者工廠
SchedulerFactory sf = new StdSchedulerFactory();
//創建一個調度者
Scheduler sched = sf.getScheduler();
//注冊並進行調度
sched.scheduleJob(job,trigger);
//啟動調度
sched.start();
/*Thread.sleep(3000);
sched.shutdown();*/
}
public static void main(String[] args) throws Exception {
tool();
System.out.println("你猜");
}
}

每隔一段時間執行一次操作


在特殊時間執行某次操作
使用CronTrigger
CronTrigger也是Trigger的子類
CronTrigger和SimpleTrigger的對比:

CronTrigger允許用戶更精准地控制任務的運行日期和時間,而不僅僅是定義工作的頻度
CronTrigger通過Cron表達式定義准確的運行時間點。創建CronTrigger的語法如下:

四、Cron表達式
要使用CronTrigger,必須掌握Cron表達式
Cron表達式由6~7個由空格分隔的時間元素組成。第7個元素可選

Cron表達式有幾個特殊的字符,說明如下:

Cron表達式案例:


示例:


