Quartz對任務調度進行了高度抽象,提出了3個核心概念,並在org.quartz包中通過接口和類進行了描述。
任務:就是執行的工作內容。Quartz提供Job接口來支持任務定義
觸發器:定義觸發Job執行的時間觸發規則。Quartz提供Trigger類及其子類支持觸發器功能,
調度器:Quartz提供了Scheduler接口,將工作任務和觸發器綁定,保證任務可以在正確的時間執行
在系統中,對員工張三的工作任務進行提醒,實現每3秒鐘進行一次任務提醒,定時器在10秒鐘後關閉。
案例流程如下:
1.引入jar包
2.創建實體類
3.創建service
public class RemindService { //創建集合,書寫內容 public List<Plan> getPlayToday(){ List<Plan> list=new ArrayList<Plan>(); Plan plan1=new Plan("12月17日", "快回家了!!!"); Plan plan2=new Plan("12月18日", "這是真的!!!"); list.add(plan1); list.add(plan2); return list; } //打印計劃的時間與內容 public void plintMessage(){ List<Plan> list=getPlayToday(); for (Plan plan : list) { System.out.println("計劃的時間:"+plan.getDate()+"計劃的內容:"+plan.getTask()); } } }
4.創建quartz
public class RemindJob implements Job { //植入service private RemindService service = new RemindService(); @Override public void execute(JobExecutionContext arg0) throws JobExecutionException { service.plintMessage(); } public RemindService getService() { return service; } public void setService(RemindService service) { this.service = service; } }
5.測試類:
public class MyQuertzTest { public static void tool() throws Exception{ //創建job JobDetail job = JobBuilder.newJob(RemindJob.class)// .withIdentity("job1", "group1").build(); //構建trigger /* CronTrigger trigger = TriggerBuilder.newTrigger().// withIdentity("trigger1", "group1").// withSchedule(CronScheduleBuilder.cronSchedule("0 40 18 ? * 7#3 2016")) .build(); */ Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "myTriggerGroup") .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(60) .repeatForever()) .startAt(new Date(System.currentTimeMillis())) .build(); //創建調度者工廠 SchedulerFactory sfc = new StdSchedulerFactory(); //創建一個調度者 Scheduler sched=sfc.getScheduler(); //注冊並進行調度 sched.scheduleJob(job, trigger); sched.start(); //Thread.sleep(3000); } public static void main(String[] args) { try { tool(); } catch (Exception e) { e.printStackTrace(); } } }
CronTrigger也是Trigger的子類
CronTrigger和SimpleTrigger的對比:
CronTrigger允許用戶更精准地控制任務的運行日期和時間,而不僅僅是定義工作的頻度
CronTrigger通過Cron表達式定義准確的運行時間點。創建CronTrigger的語法如下:
Cron表達式
要使用CronTrigger,必須掌握Cron表達式
Cron表達式由6~7個由空格分隔的時間元素組成。第7個元素可選
Spring3.2.11與Quartz2.2.1整合時內存洩漏問題解決 http://www.linuxidc.com/Linux/2015-06/119042.htm
Spring配置Quartz任務調度框架教程 http://www.linuxidc.com/Linux/2014-11/108907.htm
Quartz深入淺出 http://www.linuxidc.com/Linux/2014-09/107007.htm
Quartz1.6有狀態JOB碰到的棘手問題既解決方案 http://www.linuxidc.com/Linux/2014-09/107005.htm
Spring 3整合Quartz 2實現定時任務 http://www.linuxidc.com/Linux/2014-09/107006.htm
Java項目中定時任務之Quartz的應用 http://www.linuxidc.com/Linux/2013-12/94443.htm
Spring 3 調度器示例 —— JDK 定時器和 Quartz 展示 http://www.linuxidc.com/Linux/2013-10/91946.htm
Quartz框架 實現任務調度 http://www.linuxidc.com/Linux/2016-11/136778.htm
Spring Quartz定時任務 http://www.linuxidc.com/Linux/2016-11/137525.htm