在項目中經常會碰到定時任務,quartz是一款非常優秀的開源框架, 提供了定時任務的支持,還支持任務的持久化,並且提供了對數據庫的支持。下面首先對quartz做一個簡單介紹,並附上一個小例子。
1、下面是quartz的官網:
http://www.quartz-scheduler.org//,打開網址我們可以看到quartz最新的版本是2.2.3這裡我也以此版本作為例子的環境。quartz從2.0版本其做了很大的改變,具體的變化可以自己查閱相關資料,在此不贅述。
2、我這裡下載的是quartz-2.2.3-distribution.tar.gz,用解壓縮工具解壓出來得到如下圖的文件目錄結構,
docs:quartz的文檔信息,包含了和數據庫相關的建表sql;
examples:例子;
javadoc:使用java的doc,可以使用jd2chm工具轉化為chm格式的文檔;
lib:quartz的jar包,包含了使用quartz的所有包(依賴包和quartz的jar包);
licenses:許可文件;
src:quartz的源碼;
3、從lib包裡我們可以看到quartz的日志系統使用的是slf4j,但是其真正的日志系統是log4j,具體的日志框架描述,可以參看我別的文章。
4、quartz即可以用在java工程中,也可以用在javaweb項目中,這裡以javaweb項目為環境做例子。
5、把quartz文件夾下的lib文件夾裡的所有jar包放到項目的lib目錄下。
6、經過上面的步驟就把quartz引入到了工程中。
下面是具體的例子的說明及代碼:
一、首先,要創建一個任務,quartz規定任務必須實現org.quarta.Job接口,此接口就一個方法execute,這個方法就是任務執行的時候允許的方法,具體的業務實現在這個方法裡,我這裡只進行了簡單的打印,
1 package com.cn.myScheduler; 2 3 import org.quartz.Job; 4 import org.quartz.JobExecutionContext; 5 import org.quartz.JobExecutionException; 6 public class MyJob implements Job { 7 @Override 8 public void execute(JobExecutionContext arg0) throws JobExecutionException { 9 // TODO Auto-generated method stub 10 System.out.println("this is my first scheduler!"); 11 } 12 13 }
二、創建完任務之後,我們還要創建一個包含任務信息的jobDetail,一個管理任務執行的促發器trigger,最後就是調度任務,
1 package com.cn.myScheduler; 2 3 import org.quartz.JobBuilder; 4 import org.quartz.JobDetail; 5 import org.quartz.Scheduler; 6 import org.quartz.SchedulerException; 7 import org.quartz.SchedulerFactory; 8 import org.quartz.SimpleScheduleBuilder; 9 import org.quartz.Trigger; 10 import org.quartz.TriggerBuilder; 11 import org.quartz.impl.StdSchedulerFactory; 12 public class TestMyJob { 13 public static void main(String[] args) { 14 // TODO Auto-generated method stub 15 try{ 16 //1、獲得一個scheduler 17 SchedulerFactory sf=new StdSchedulerFactory(); 18 Scheduler scheduler =sf.getScheduler(); 19 //2、獲得一個jobDetail 20 JobDetail job = JobBuilder.newJob(MyJob.class) 21 .withIdentity("myJob") 22 .build(); 23 24 //3、獲得一個trigger 25 Trigger trigger = TriggerBuilder.newTrigger() 26 .withIdentity("trigger1", "group1") 27 .startNow() 28 .withSchedule(SimpleScheduleBuilder.simpleSchedule() 29 .withIntervalInSeconds(40) 30 .withRepeatCount(10)) 31 .build(); 32 //4、把任務和觸發器放到scheduler中 33 scheduler.scheduleJob(job, trigger); 34 //5、開始任務調度 35 scheduler.start(); 36 } 37 catch(SchedulerException e){ 38 e.printStackTrace(); 39 } 40 } 41 42 }
注釋1:創建一個scheduler,scheduler負責所有任務的調度。
注釋2:創建一個包含任務信息的jobDetail,指定任務的實現類為MyJob.class,使用withIdentity方法指定任務名稱,還可以用第二個參數指定任務的組名
注釋3:創建一個任務促發器,指定了促發器的名稱“trigger1”和促發器的組名“group1”;設置了促發的時間為當前促發,且每隔40S執行一次,一共執行10次
注釋4:把jobDetail和trigger放到scheduler中
注釋5:啟動scheduler
運行程序可以看到程序的輸出。
以上就是一個簡單的quartz定時任務。
有關quartz的內容會持續更新!
謝謝!