基礎知識:
一:Quartz具有的特點:
(1)具有強大的調度功能,很容易與spring集成,形成靈活可配置的調度功能。
(2)調度環境的持久化機制:可以保存並恢復調度現場,即使系統因為故障關閉,任務調度現場的數據並不會丟失;timer沒有這些特點。
(3)靈活的應用方式:可以靈活的定義觸發器調度的時間表,並可以對觸發器與任務進行關聯映射;
(4)分布式與集群能力。
二:設計模式
設計模式:Builder模式、Factory模式、組件模式、鏈式寫法
核心概念:調度器(Scheduler)、任務(Job)、觸發器(Trigger)
(1)Job
實質:是一個接口,里面有一個execute方法,用於編寫任務業務邏輯
生命周期:當調度器需要執行job時創建實例,調用完成后釋放job實例
(2)JobDetail
概念:描述Job實例的詳細信息
屬性:
(1)name:job名稱
(2)group:job組,默認值為default
(3)jobclass:job實現類
(4)jobDataMap:存儲Job實例的狀態信息,調度器使用這些信息添加Job實例
(3)JobExecutionContext
概念:Job能通過JobExecutionContext訪問Quartz運行環境以及Job的明細數據,當Scheduler調用Job時能將數據傳遞給execute()方法
(4)JobDataMap
概念:是一個JDK中Map接口實例,在任務調度時存在於JobExecutionContext中,可將參數對象傳遞給在運行的Job實例;而且,它自身有方便的方法可存取基本數據類型
獲取方式:從JobDataMap中直接獲取、在Job實現類中添加setter方法對應JobDataMap的鍵值
(5)Trigger屬性:
(1)Jobkey:Job實例標識,觸發器被觸發時,job實例隨之執行
(2)startTime:首次被觸發時間
(3)endTime:不再被觸發的時間
(6)SimpleTrigger
概念:在指定時間段內只執行一次任務或者在指定時間間隔內多次執行任務
(7)CronTrigger(更常用,可以代替SimpleTrigger)
概念:基於日歷的作業調度器,指定哪一個月哪一天什么時間執行
使用Corn表達式 可以根據日歷 來指定執行時間。
Cron表達式:
用於配置CronTrigger實例,是由7個子表達式組成的字符串,描述了時間表的詳細信息,格式:[秒] [分] [小時] [日] [月] [周] [年]
說明:(1)第二個例子中,0/5是指每隔5分鍾觸發
(2)第四個例子中,6#3是指第三周的星期五(6表示星期五,因為國外每周是從星期日開始)
(3)第五個例子中,6L是指最后一周的星期五(6表示星期五,因為國外每周是從星期日開始)
補充:如何定義每月最后一個工作日呢?
答案:0 0 0 LW * ?
也可以使用“在線Cron表達式生成器”,進行生成表達式
注意:job 和 Trigger 是一對多的關系
其中:
(1)scheduleJob(JobDetail jobDetail,Trigger trigger)是指返回最近一次執行的時間
(2)standby()表示暫時將scheduler掛起,可以后期再次開啟,即調用start()進行開啟。
(3)shutdown 的用法:關閉scheduler調度器,后期不可以被重啟。
shutdown(true)表示等待所有正在執行的job執行完畢之后,再關閉scheduler
shutdown(false)即shutdown()表示直接關閉scheduler
三:quartz.properties配置文件的引入:
首先quartz.jar包的org.quartz目錄下有一個默認的quartz.properties,如果當前項目下沒有創建quartz.properties文件,系統會默認執行quartz.jar包下的該配置文件。而且,當前項目下的quartz.properties文件優先於quartz.jar包下的quartz.properties文件。
如何測試呢?
方案:可以任意修改項目下創建的quartz.properties文件內容,不符合要求的就會有報錯信息。
關於代碼的詳細信息,請見下一章節(Java定時任務調度工具詳解Quartz(二))