在項目中經常會碰到定時任務,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的內容會持續更新!
謝謝!