摘 要:本文介紹了Quartz框架的功能和特點,將Quartz框架和Spring框架進行整合,設計并實現(xiàn)了一個動態(tài)任務調度系統(tǒng),該系統(tǒng)簡化了Java EE Web系統(tǒng)中任務調度功能的開發(fā),使得任務調度變的靈活和簡單。
關鍵詞:Quartz;Spring;Java EE
中圖分類號:TP311.52
隨著計算機軟件的快速發(fā)展和普及,企業(yè)開始越來越多地利用軟件來提高生產和管理效率。企業(yè)信息化建設的程度對于提升企業(yè)的競爭力有著重大的影響。隨著軟件技術的不斷創(chuàng)新和發(fā)展,針對企業(yè)信息系統(tǒng)各方面需求也產生了許多新技術,比如定時任務。
在我們的管理信息系統(tǒng)可能經常需要完成定時任務。比如:每天晚上,或許僅僅每個月的最后一天備份數(shù)據(jù)或者向指定地址發(fā)送郵件等,Quartz框架就可以幫助企業(yè)實現(xiàn)這種功能。
1 Quartz框架介紹
Quartz是OpenSymphony開源組織在的一個開源項目,它能夠創(chuàng)建調度來執(zhí)行一個作業(yè),可以與Java項目進行集成。
Quartz框架的核心是調度器。調度器負責管理Quartz應用運行時環(huán)境。調度器不是靠自己做所有的工作,而是依賴框架內一些非常重要的部件。為確??缮炜s性,Quartz采用了基于多線程的架構。啟動時,框架初始化一套worker線程,這套線程被調度器用來執(zhí)行預定的作業(yè)。Quartz依賴一套松耦合的線程池管理部件來管理線程環(huán)境。Quartz對任務調度的領域問題進行了高度的抽象,提出了調度器(Scheduler)、任務(Job)和觸發(fā)器(Trigger)這3個核心的概念。
2 Quartz框架核心
核心接口。Job:是一個任務接口,包含一個void execute(JobExecutionContext context)方法,該方法用來定義任務,JobExecutionContext類提供了調度上下文包含的各種信息。Job運行時的信息保存在JobDataMap實例中。
JobDetail:Quartz在每次執(zhí)行Job時,都重新創(chuàng)建一個Job實例,該實例必須是Job的實現(xiàn)類,是通過newInstance()的反射機制進行實例化。因此需要通過JobDetail類來描述Job的實現(xiàn)類及其它相關的靜態(tài)信息,如Job名字、描述、關聯(lián)監(jiān)聽器等信息。
Trigger:是描述觸發(fā)Job執(zhí)行的時間觸發(fā)規(guī)則的類。主要有SimpleTrigger和CronTrigger這兩個子類。SimpleTrigger適合僅需觸發(fā)一次或者固定時間間隔周期執(zhí)行的任務,而CronTrigger則可以通過Cron表達式定義出任意規(guī)則的調度方案。
Scheduler:是Trigger和JobDetail注冊的獨立運行容器,兩者在Scheduler中擁有各自的組及名稱,組及名稱是Scheduler查找定位容器中某一對象的依據(jù),Trigger和Trigger和JobDetail可以注冊到Scheduler中的組及名稱必須唯一。Scheduler定義了多個接口方法,允許外部通過組及名稱訪問和控制容器中Trigger和JobDetail。
3 動態(tài)調度系統(tǒng)設計
動態(tài)調度系統(tǒng)是將任務的開發(fā)和任務的調度分離。任務由開發(fā)人員開發(fā),開發(fā)人員不需要考慮任務的調度問題,只需要考慮任務做什么即可;任務調度由用戶操作,用戶可以根據(jù)自身情況進行調度,包括調度設置、開始、暫停。系統(tǒng)設計時,為了使任務開發(fā)簡單,開發(fā)人員在進行任務開發(fā)時,只需要實現(xiàn)XyJob接口,該接口繼承自Job接口,是用來定義任務的,包含2個方法execute(JobExecutionContext arg0)是任務執(zhí)行的方法,getName()獲取當前任務的名稱。當Spring容器啟動后,系統(tǒng)自動檢測所有實現(xiàn)XyJob接口的類,并將其初始化為任務,在初始化的過程中,系統(tǒng)會讀取用戶已經設置的調度信息。用戶可以通過頁面查看系統(tǒng)中的所有任務,并且可以進行任務調度設置、開啟、暫停操作,如圖1所示。
圖1
4 動態(tài)調度系統(tǒng)實現(xiàn)
4.1 系統(tǒng)配置
要在Java Web項目中使用Quartz,首先需要引入相關jar包。其次,需要在Spring的applicationContext.xml文件中添加以下配置,該配置可以使得spring為Quartz創(chuàng)建Scheduler容器。
class=\"org.springframework.scheduling.quartz.SchedulerFactoryBean\">
4.2 系統(tǒng)實現(xiàn)
Spring將所有已經實現(xiàn)XyJob接口的類進行實例化,并將實例化后的對象注入到一個List集合中。當Spring容器初始化成功后,開始將所有的XyJob對象注冊到Scheduler容器中,注冊過程中會讀取用戶設置的Crom表達式,并將其應用到任務中。
圖2 初始化任務
當需要查詢所有任務時,通過任務的getName()方法獲得任務名稱,再通過任務名稱去Scheduler容器中查詢該任務的當前狀態(tài)。
5 結束語
本文在分析了Quartz框架的功能和特點,通過對Quartz的研究,將Spring與Quartz框架整合,建立了一個動態(tài)任務調度系統(tǒng)。該系統(tǒng)的設計使得任務的開發(fā)和任務的調度相分離,開發(fā)人員只需實現(xiàn)接口來定義任務,用戶來進行調度設置。該系統(tǒng)提高了任務調度的靈活性,可以適用于任何企業(yè)的任務調度需求;同時又降低了開發(fā)難度,減少了開發(fā)時間,提高了開發(fā)效率。
參考文獻:
[1]胡利強,周冬初,王偉.Quartz調度器與Web程序整合的研究和應用[J].計算機與現(xiàn)代化,2010(08):98-99.
[2]計文柯.Spring技術內幕(第2版)[M].北京:機械工業(yè)出版社,2012.
[3]http://www.quartz-scheduler.org/documentation[OL].
[4]http://www.blogjava.net/baoyaer/articles/155645.html[OL].
作者簡介:劉志鵬(1985-),男,陜西西安人,碩士,研究方向:煤炭企業(yè)供應鏈電子商務、物流信息系以及集成供應鏈系統(tǒng)。
作者單位:西安郵電大學 經濟與管理學院,西安 710061
基金項目:西安郵電大學校青年教師科研基金項目(項目編號:ZL2014-49)。