一、常用介面:
1、Job介面:該介面只有一個方法
void execute(JobExecutionContext context)
開發人員實現該介面定義需要執行的任務。JobExecutionContext類提供調度內容相關的各種資訊
2、JobDetail:用於描敘Job實作類別及其他的一些靜態資訊
3、Trigger:描敘觸發Job執行的時間觸發規則
4、Calendar:定義了一個關聯Trigger可能(或者不可能)觸發的時間空間。它沒有定義觸發的真即時間,而是用在在普通的Schedule需要限制Trigger觸發的時候。大部分Calendar包含預設所有的時間,並且使用者去排除部分時間。
5、Scheduler:運行容器,使用SchedulerFactory建立Scheduler執行個體
二、程式碼範例:
1、使用Quartz,需要實現Job介面;
public class TestJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Hello World! - " + new Date()); //do more... }}
2、調度【比較簡單,直接看代碼就可以了】
public class quartzTest { public static void main(String args[]) throws SchedulerException, ParseException { JobDetail jobDetail= JobBuilder.newJob(TestJob.class) .withIdentity("testJob_1","group_1") .build(); Trigger trigger= TriggerBuilder .newTrigger() .withIdentity("trigger_1","group_1") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) //時間間隔 .withRepeatCount(5) //重複次數(將執行6次) ) .build(); SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); sched.scheduleJob(jobDetail,trigger); sched.start(); }}
這裡使用的是2.2.1版本,參考官方文檔的樣本。看到一些參考書使用的版本比較老,所以會有一些出入,很多方法都被棄用了,所以還是直接看文檔比較實在,Quartz的官方網站地址是:http://www.quartz-scheduler.org/
三、Quartz2.2.1設定檔樣本
# Default Properties file for use by StdSchedulerFactory# to create a Quartz Scheduler Instance, if a different# properties file is not explicitly specified.# #叢集配置org.quartz.scheduler.instanceName: DefaultQuartzSchedulerorg.quartz.scheduler.rmi.export: falseorg.quartz.scheduler.rmi.proxy: falseorg.quartz.scheduler.wrapJobExecutionInUserTransaction: false org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPoolorg.quartz.threadPool.threadCount: 10org.quartz.threadPool.threadPriority: 5org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true org.quartz.jobStore.misfireThreshold: 60000 #============================================================================# Configure JobStore#============================================================================ #預設配置,資料儲存到記憶體#org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore#持久化配置org.quartz.jobStore.class:org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.StdJDBCDelegateorg.quartz.jobStore.useProperties:true#資料庫表首碼org.quartz.jobStore.tablePrefix:qrtz_org.quartz.jobStore.dataSource:qzDS #============================================================================# Configure Datasources#============================================================================#JDBC驅動org.quartz.dataSource.qzDS.driver:com.mysql.jdbc.Driverorg.quartz.dataSource.qzDS.URL:jdbc:mysql://localhost:3306/quartzdborg.quartz.dataSource.qzDS.user:rootorg.quartz.dataSource.qzDS.password:123456org.quartz.dataSource.qzDS.maxConnection:10
四、資料庫相關
持久化須事先在相應資料庫建立Quartz的資料表,在Quartz發布包裡面的docs/dbTables有對應不同資料庫的SQL指令碼
例如,這裡使用的是MYSQL:
資料表欄位解釋:
- 表qrtz_job_details: 儲存job詳細資料,該表需要使用者根據實際情況初始化
- job_name:叢集中job的名字,該名字使用者自己可以隨意定製,無強行要求
- job_group:叢集中job的所屬組的名字,該名字使用者自己隨意定製,無強行要求
- job_class_name:實作類別的完全包名,quartz就是根據這個路徑到classpath找到該job類
- is_durable:是否持久化,把該屬性設定為1,quartz會把job持久化到資料庫中
- job_data:一個blob欄位,存放持久化job對象
- 表qrtz_triggers: 儲存trigger資訊
- trigger_name: trigger的名字,該名字使用者自己可以隨意定製,無強行要求
- trigger_group:trigger所屬組的名字,該名字使用者自己隨意定製,無強行要求
- job_name: qrtz_job_details表job_name的外鍵
- job_group: qrtz_job_details表job_group的外鍵
- trigger_state:當前trigger狀態,設定為ACQUIRED,如果設定為WAITING,則job不會觸發
- trigger_cron:觸發器類型,使用cron運算式
- 表qrtz_cron_triggers:儲存cron運算式表
- trigger_name: qrtz_triggers表trigger_name的外鍵
- trigger_group: qrtz_triggers表trigger_group的外鍵
- cron_expression:cron運算式
- 表qrtz_scheduler_state:儲存叢集中note執行個體資訊,quartz會定時讀取該表的資訊判斷叢集中每個執行個體的目前狀態
- instance_name:之前設定檔中org.quartz.scheduler.instanceId配置的名字,就會寫入該欄位,如果設定為AUTO,quartz會根據物理機名和目前時間產生一個名字
- last_checkin_time:上次檢查時間
- checkin_interval:檢查間隔時間