quartz使用(一),quartz使用(
在項目中經常會碰到定時任務,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 stub10 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 stub15 try{16 //1、獲得一個scheduler17 SchedulerFactory sf=new StdSchedulerFactory();18 Scheduler scheduler =sf.getScheduler();19 //2、獲得一個jobDetail20 JobDetail job = JobBuilder.newJob(MyJob.class)21 .withIdentity("myJob")22 .build();23 24 //3、獲得一個trigger25 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的內容會持續更新!
謝謝!