屈洪雪 陳雙 徐海洋
(1.山東電子職業(yè)技術(shù)學院 山東省濟南市 250000 2.浪潮集團 山東省濟南市 250000)
Quartz[1]是一個開源的作業(yè)調(diào)度框架,完全由Java 編寫,為在Java 應(yīng)用程序中進行作業(yè)調(diào)度提供了簡單而強大的機制。Quartz 能夠創(chuàng)建簡單的或復雜的調(diào)度來用執(zhí)行一個或多個作業(yè)。常見的使用場景包括:定時發(fā)送消息、定時生成報表、自動更新靜態(tài)數(shù)據(jù)及自動結(jié)賬等等。Quartz 的優(yōu)勢主要在于提供強大的、靈活的調(diào)度機制的同時保留了使用方法的簡單性[2]。但是Quartz 主要專注于后臺執(zhí)行,缺乏了可視化界面,使用者無法直觀的觀察到系統(tǒng)中作業(yè)調(diào)度的情況;同時任何符合Quartz 標準的作業(yè)都可以在系統(tǒng)中運行,這種情況增加了系統(tǒng)管理作業(yè)的難度。針對Quartz 的特點以及上述問題,本文基于Spring 設(shè)計的具有代理功能的Quartz 可視化定時任務(wù)管理方案來幫助我們解決。
Quartz 有兩個核心組件,它們分別是Job 和Trigger。其中Job 用于表示被調(diào)度的任務(wù),是定時執(zhí)行的實際業(yè)務(wù)處理過程[3];trigger 表示何時觸發(fā)任務(wù)執(zhí)行。下面是Quartz 中的幾個關(guān)鍵概念:
(1)Job 接口:該接口內(nèi)只有一個Execute 方法,在Quartz 中,所有的定時任務(wù)都必須要實現(xiàn)該方法。
(2)Trigger 觸發(fā)器:根據(jù)設(shè)置的任務(wù)計劃規(guī)則來觸發(fā)執(zhí)行調(diào)度任務(wù)。
(3)JobDetail:表示每個計劃任務(wù)相關(guān)的詳情信息。
(4)調(diào)度器Scheduler:Quartz 中所有的調(diào)度任務(wù)執(zhí)行與否都由該調(diào)度器控制[4]。
該方案的整體邏輯設(shè)計主要分為三層:Quartz 核心層、Quartz代理層以及Quartz 展示層。見圖1,其中:
圖1:整體邏輯設(shè)計
(1)Quartz 核心層主要使用Quartz 的調(diào)度器Scheduler 與調(diào)度程序進行核心交互;提供了Job 接口,該接口由被調(diào)度程序執(zhí)行的任務(wù)類所實現(xiàn);通過JobDetail 來定義定時任務(wù)的實例;提供Trigger 觸發(fā)器,主要用來表明任務(wù)在什么時候會執(zhí)行。
(2)Quartz 代理層主要用來提供擴展的Job 接口,我們稱之為代理Job 接口。該接口繼承自Quartz 核心層的Job 接口,主要提供用于實現(xiàn)調(diào)度任務(wù)個性化顯示的方法名,該類方法主要用于被調(diào)度程序執(zhí)行的常規(guī)的任務(wù)類所實現(xiàn);其次,該層提供代理Job 注解,該Job 注解是用來豐富可管理的任務(wù)信息;內(nèi)部使用代理Job 類來實現(xiàn)Quartz 的Job 接口,用于與Quartz 對接;并且內(nèi)部使用代理Job 實例用于運行常規(guī)類定義的作業(yè)。
(3)Quartz 展示層主要提供了觸發(fā)器組Trigger Group、Trigger、任務(wù)組Job Group 及Job 的維護界面,通過在前臺維護界面編輯并保存相應(yīng)的信息轉(zhuǎn)換為數(shù)據(jù)庫中的一條條記錄,同時在Job 維護界面可供代理層進行ID 選擇,該ID 指的是代理Job 類的具體實現(xiàn)對應(yīng)的Id;提供了Job 綁定Trigger、Job 啟動及Job 停止等Job 的操作功能,方便使用者更直觀的操作Job。
代理設(shè)計主要是完成如下定義:
(1)定義HSPSchedulerJob 注解,用以維護將來被注解的常規(guī)類的BeanId 和Job 的名稱;
(2)定義IHSPSchedulerJob 接口及execute 接口方法,用以被調(diào)度程序執(zhí)行的常規(guī)的任務(wù)類所實現(xiàn)。具體設(shè)計如圖2 所示。
圖2:代理設(shè)計
可視化設(shè)計的主要目的是更直觀、更高效的對任務(wù)進行管理。將定時任務(wù)的各項屬性:任務(wù)組編號、任務(wù)組名稱、任務(wù)編號、任務(wù)名稱、任務(wù)狀態(tài)及觸發(fā)器信息等展示到前端界面,供用戶直觀、方便查看定時任務(wù)的執(zhí)行狀態(tài)。具體界面設(shè)計如圖3 所示。
圖3:可視化設(shè)計
(1)對任務(wù)表、觸發(fā)器表的結(jié)構(gòu)進行設(shè)計,設(shè)計結(jié)構(gòu)如下所示:
(2)提供后端接口供頁面訪問
代理注解設(shè)計如下所示:
本文基于開源的任務(wù)調(diào)度框架Quartz 設(shè)計的具有代理功能的方案在保留原有Quartz 框架調(diào)度靈活、功能強大、方法簡單的優(yōu)勢上增加了Quartz 代理層。通過在代理層定義拓展的IHSPSchedulerJob接口,用戶可以通過實現(xiàn)該接口中定義的方法實現(xiàn)定時任務(wù)的可視化操作,便于任務(wù)的管理,方便開發(fā)人員或者系統(tǒng)維護人員及時發(fā)現(xiàn)定時任務(wù)的執(zhí)行狀態(tài)及狀況處理。本方案目前可以應(yīng)用一般的應(yīng)用場景,但是對于體量龐大的用戶群和海量數(shù)據(jù)或者是一些相當復雜的業(yè)務(wù)場景,該方案還有待于完善。