天天看點

利用quartz實作定時任務,與spring整合

1. 介紹 

Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源項目,是完全由java開發的一個開源的任務日程管理系統,“任務進度管理器”就是一個在預先确定(被納入日程)的時間到達時,負責執行(或者通知)其他軟體元件的系統。 

Quartz用一個小Java庫釋出檔案(.jar檔案),這個庫檔案包含了所有Quartz核心功能。這些功能的主要接口(API)是Scheduler接口。它提供了簡單的操作,例如:将任務納入日程或者從日程中取消,開始/停止/暫停日程進度。 

2. 定時器種類 

Quartz 中五種類型的 Trigger:SimpleTrigger,CronTirgger,DateIntervalTrigger,NthIncludedDayTrigger和Calendar 類( org.quartz.Calendar)。 

最常用的: 

SimpleTrigger:用來觸發隻需執行一次或者在給定時間觸發并且重複N次且每次執行延遲一定時間的任務。 

CronTrigger:按照月曆觸發,例如“每個周五”,每個月10日中午或者10:15分。 

(1)核心類 

QuartzSchedulerThread :負責執行向QuartzScheduler注冊的觸發Trigger的工作的線程。 

ThreadPool:Scheduler使用一個線程池作為任務運作的基礎設施,任務通過共享線程池中的線程提供運作效率。 

QuartzSchedulerResources:包含建立QuartzScheduler執行個體所需的所有資源(JobStore,ThreadPool等)。 

SchedulerFactory :提供用于擷取排程程式執行個體的用戶端可用句柄的機制。 

JobStore: 通過類實作的接口,這些類要為org.quartz.core.QuartzScheduler的使用提供一個org.quartz.Job和org.quartz.Trigger存儲機制。作業和觸發器的存儲應該以其名稱群組的組合為唯一性。 

QuartzScheduler :這是Quartz的核心,它是org.quartz.Scheduler接口的間接實作,包含排程org.quartz.Jobs,注冊org.quartz.JobListener執行個體等的方法。 

Scheduler :這是Quartz Scheduler的主要接口,代表一個獨立運作容器。排程程式維護JobDetails和觸發器的系統資料庫。 一旦注冊,排程程式負責執行作業,當他們的相關聯的觸發器觸發(當他們的預定時間到達時)。 

Trigger :具有所有觸發器通用屬性的基本接口,描述了job執行的時間出發規則。 - 使用TriggerBuilder執行個體化實際觸發器。 

JobDetail :傳遞給定作業執行個體的詳細資訊屬性。 JobDetails将使用JobBuilder建立/定義。 

Job:要由表示要執行的“作業”的類實作的接口。隻有一個方法 void execute(jobExecutionContext context) 

(jobExecutionContext 提供排程上下文各種資訊,運作時資料儲存在jobDataMap中) 

Job有個子接口StatefulJob ,代表有狀态任務。 

有狀态任務不可并發,前次任務沒有執行完,後面任務處于阻塞等到。

一個job可以被多個Trigger 綁定,但是一個Trigger隻能綁定一個job!

與spring整合

配置檔案: quartz.properties

利用quartz實作定時任務,與spring整合

建立Trigger類

利用quartz實作定時任務,與spring整合

寫任務,定義JOB

利用quartz實作定時任務,與spring整合

編寫任務的實作類,具體的邏輯實作

publig class ProveApplyTime implements StatefulJobf
private static final Logger logger = LoggerFactory. getLogger (ProveApplyTime.class);
ROverrride
public void execute (JobExecutionContext argo) throws JobExecutionException {
//TODO Auto-generated method stuh
logger.debug ("開始查詢申請送出70天狀态還是核準的訂單,發送短信");
ProveApplyTimeServiceImpl proveApplyTimeServiceImpl= (ProveApplyTimeServiceImpl) CodeCache
	.getWebApplicationContext().getBean ("proveApplyTimeServiceImpl");
proveApplvTimeServiceImpl. addSMSProvingApplvTime ();
logger.debug("完成查詢申請送出70天狀态還是核準的訂單,發送短信完成");
}