一、任務調度概述
在企業級應用中,經常會制定一些“計划任務”,即在某個時間點做某件事情,核心是以時間為關注點,即在一個特定的時間點,系統執行指定的一個操作,任務調度涉及多線程並發、線程池維護、運行時間規則解析、運行現場的保護以恢復等方面。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表達式案例:
示例: