趙曉麗
(長(zhǎng)治學(xué)院 計(jì)算機(jī)系,山西 長(zhǎng)治 046011)
基于Spring的定時(shí)器的應(yīng)用實(shí)現(xiàn)
趙曉麗
(長(zhǎng)治學(xué)院 計(jì)算機(jī)系,山西 長(zhǎng)治 046011)
結(jié)合定時(shí)器的工作原理和輕量級(jí)Spring的體系框架,文章在定時(shí)器執(zhí)行作業(yè)的原理和過(guò)程的基礎(chǔ)上,依托Spring實(shí)現(xiàn)了通過(guò)簡(jiǎn)單的配置來(lái)構(gòu)建重復(fù)的任務(wù)計(jì)劃,展示了Spring框架實(shí)現(xiàn)定時(shí)器的優(yōu)勢(shì).
定時(shí)器;Timer;Quatz
在項(xiàng)目程序開(kāi)發(fā)過(guò)程中,某些動(dòng)作或周期性工作經(jīng)常需要控制定時(shí)完成或者重復(fù)執(zhí)行,這時(shí)就需要使用定時(shí)器.如某一單位的員工考勤系統(tǒng),需要在固定的時(shí)間對(duì)員工刷卡數(shù)據(jù)的提取、審核以及數(shù)據(jù)報(bào)表的產(chǎn)生等任務(wù)進(jìn)行固定重復(fù)執(zhí)行,這些問(wèn)題都離不開(kāi)定時(shí)器來(lái)實(shí)現(xiàn)這個(gè)功能.因此,定時(shí)器的利用是軟件項(xiàng)目開(kāi)發(fā)中被廣泛應(yīng)用是非常重要的組成部分.近年來(lái),輕量級(jí)容器的優(yōu)勢(shì)和使用熱潮,使得每隔一段時(shí)間都會(huì)有新的輕量級(jí)容器出現(xiàn).盡管這樣,作為輕量級(jí)容器的原始代表,Spring能夠快速地將不同的組件組裝成一個(gè)應(yīng)用程序.作為Spring這種應(yīng)用較成熟的輕量級(jí)框架,Spring會(huì)將定時(shí)任務(wù)的調(diào)用部分提到配置文件當(dāng)中,使定時(shí)器的觸發(fā)條件變得更加靈活,配置簡(jiǎn)單,實(shí)現(xiàn)起來(lái)方便.
定時(shí)器的出現(xiàn)是為了簡(jiǎn)化定時(shí)任務(wù)的自動(dòng)執(zhí)行,從而大大減少人員的重復(fù)工作量.大多數(shù)應(yīng)用系統(tǒng)中利用時(shí)間功能來(lái)實(shí)現(xiàn)定時(shí)任務(wù)的自動(dòng)執(zhí)行,對(duì)執(zhí)行時(shí)間有精確要求,由人工來(lái)掌控會(huì)降低其正確性和準(zhǔn)確性,而定時(shí)器正好可以解決這個(gè)問(wèn)題.
在Java環(huán)境中,實(shí)現(xiàn)多任務(wù)調(diào)度執(zhí)行的程序框架就是定時(shí)器.它由JavaAPI的TimerTask來(lái)實(shí)現(xiàn)多任務(wù)的調(diào)度,它使得程序員開(kāi)發(fā)起來(lái)較為容易些.目前,大多數(shù)系統(tǒng)中的時(shí)間功能不能滿足用戶對(duì)自動(dòng)執(zhí)行的定時(shí)任務(wù)的復(fù)雜需求,然而單獨(dú)開(kāi)發(fā)專業(yè)的定時(shí)系統(tǒng),無(wú)疑會(huì)增加開(kāi)發(fā)成本和時(shí)間,而Spring的定時(shí)器功能強(qiáng)大,實(shí)現(xiàn)起來(lái)方便,可以降低開(kāi)發(fā)成本,并且能夠獲得比重新開(kāi)發(fā)定時(shí)器更高的可靠性,可以在系統(tǒng)中廣泛應(yīng)用.
軟件行業(yè)中,企業(yè)應(yīng)用軟件開(kāi)發(fā)變得越來(lái)越龐大,業(yè)務(wù)本身也越來(lái)越復(fù)雜.為了解決軟件程序開(kāi)發(fā)的復(fù)雜性,出現(xiàn)了很多解決業(yè)務(wù)問(wèn)題的應(yīng)用框架,而Spring是最具典型代表的.Spring是一個(gè)開(kāi)源框架,它的可開(kāi)放性,它的非侵入式性,使得應(yīng)用中的對(duì)象并不強(qiáng)制依賴于Spring的特定類.軟件開(kāi)發(fā)人員可以依托設(shè)計(jì)模式與分層架構(gòu)優(yōu)勢(shì),根據(jù)業(yè)務(wù)本身需要可以自由選擇Spring的某項(xiàng)技術(shù)或全部,達(dá)到快速簡(jiǎn)化軟件應(yīng)用開(kāi)發(fā)的目的.
通俗地講,Spring是一個(gè)輕量級(jí)控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架,其主要核心是IoC模式,即反向控制.作為一個(gè)輕量級(jí)的解決J2EE應(yīng)用程序問(wèn)題的一站式框架,用Spring的IOC容器將對(duì)象之間的依賴關(guān)系通過(guò)配置文件交給Spring,就可以控制業(yè)務(wù)對(duì)象之間的依賴注入,讓我們更專注于應(yīng)用邏輯,避免硬編碼所造成的組件間過(guò)度程序耦合.另外,Spring 還有一個(gè)基于控制反轉(zhuǎn)(IOC)的功能強(qiáng)大而實(shí)現(xiàn)靈活的Web框架,可以很方便集成各種優(yōu)秀框架,如Struts,Hibernate,Hession,Quartz.Spring的這些優(yōu)點(diǎn)使開(kāi)發(fā)人員編寫的程序代碼更加簡(jiǎn)潔、易于管理、維護(hù)而且便于測(cè)試其準(zhǔn)確性,同時(shí)也成為Spring中的各種模塊最基礎(chǔ)的支持.
Spring有分層的體系結(jié)構(gòu),框架由七個(gè)模塊組成,如圖1所示.
圖1 Spring框架體系
1) Spring Core是整個(gè)框架的核心模塊,提供了基于依賴注入技術(shù)的構(gòu)件組裝機(jī)制.即采用IoC(Inversion of Control)控制反轉(zhuǎn)中的核心接口BeanFacotory,將應(yīng)用配置文件和對(duì)象依賴說(shuō)明從實(shí)際的應(yīng)用代碼中分離出來(lái).
2) Spring DAO模塊抽取數(shù)據(jù)庫(kù)訪問(wèn)中的大量重復(fù)代碼,使得數(shù)據(jù)庫(kù)操作代碼干凈簡(jiǎn)潔,免去了繁瑣的數(shù)據(jù)庫(kù)訪問(wèn)控制和異常處理的工作.
3) Spring ORM是對(duì)象/關(guān)系映射集成模塊, Spring提供了幾種流行的ORM框架的集成,包括Hibernate,JDO和iBATIS SQL映射等對(duì)象關(guān)系映射工具.
4) Spring AOP模塊采用了面向切面編程的理論, 對(duì)重復(fù)代碼進(jìn)行整理,把每個(gè)操作方法當(dāng)作一個(gè)切面單獨(dú)存放在某個(gè)模塊中,讓業(yè)務(wù)共同使用這段代碼,執(zhí)行不同的方法.這樣就可以通過(guò)讀取配置文件,提供統(tǒng)一的事務(wù)、日志、安全管理等服務(wù).
5) SpringMVC模塊提供了基于MVC設(shè)計(jì)模式的Web應(yīng)用程序開(kāi)發(fā),它可以通過(guò)策略接口進(jìn)行配置.使得Spring框架不綁定特定J2EE 服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)訪問(wèn)對(duì)象,達(dá)到在不同環(huán)境之間的重用.
6) Spring應(yīng)用上下文(Context)模塊提供一個(gè)配置文件,把上下文模塊的信息給Spring 框架,對(duì)核心模塊中的BeanFactory進(jìn)行擴(kuò)展,并增加了諸如對(duì)JNDI、EJb、電子郵件、校驗(yàn)以及調(diào)用功能等的企業(yè)服務(wù).
7) Spring Web 模塊是基于Web應(yīng)用程序的上下文模塊而建立的,其主要功能是給基于 Web 的應(yīng)用程序提供上下文服務(wù).
在Java中也可以實(shí)現(xiàn)定時(shí)器的配置,Java定時(shí)器的實(shí)現(xiàn)有兩種方法:一個(gè)是使用Timer類,另一個(gè)是使用OpenSymphony的Quartz使用.這兩種配置方法都能夠?qū)崿F(xiàn)定時(shí)任務(wù)的功能.Spring框架的優(yōu)勢(shì)是對(duì)以上兩種定時(shí)器實(shí)現(xiàn)方式提供了支持,并且簡(jiǎn)化Java中定時(shí)任務(wù)的實(shí)現(xiàn).用Spring實(shí)現(xiàn)定時(shí)器的過(guò)程分為3步.
1)創(chuàng)建定時(shí)任務(wù)類;
2)注冊(cè)定時(shí)任務(wù)類,配置計(jì)劃和任務(wù)調(diào)度器;
3)在Web項(xiàng)目中啟動(dòng)定時(shí)任務(wù).
3.1 Spring中使用Timer實(shí)現(xiàn)定時(shí)器
Timer實(shí)現(xiàn)定時(shí)任務(wù)的步驟如圖2所示.
1)首先利用TimerTask類創(chuàng)建定時(shí)任務(wù)類,部分代碼如下:
Public class TimerTask extends TimerTask
圖2 利用Timer開(kāi)發(fā)定時(shí)任務(wù)步驟
{ ……
Public void run()
{ …………. //執(zhí)行定時(shí)器任務(wù)}
………
}
2)注冊(cè)定時(shí)任務(wù)類,配置任務(wù)計(jì)劃及其調(diào)度器.首先新創(chuàng)建一個(gè)TimerConfig.xml,放在WEB-INF文件夾下.部分代碼如下:
……
3)在Web項(xiàng)目中啟動(dòng)定時(shí)服務(wù).部分代碼如下:
……
org.springframework.web.context.ContextLoaderListener
………
3.2 在Spring中使用Quartz實(shí)現(xiàn)定時(shí)器
Quartz是一個(gè)開(kāi)源的作業(yè)調(diào)度框架,它由OpenSymphony組織用java編寫而成.Quartz能夠創(chuàng)建簡(jiǎn)單或繁雜的定時(shí)任務(wù).通過(guò)Quartz來(lái)開(kāi)發(fā)定時(shí)任務(wù)如圖3所示.
圖3 利用Quartz開(kāi)發(fā)定時(shí)任務(wù)步驟
1)首先創(chuàng)建定時(shí)任務(wù)類MainTask.MainTask.java部分代碼如下:
package com.gc.action;
public class MainTask {
……
public void execute( ) { //執(zhí)行定時(shí)器任務(wù)
……
}
……
}
2)注冊(cè)定時(shí)任務(wù)類,配置任務(wù)計(jì)劃及其調(diào)度器.配置文件TimerConfig.xml的部分代碼如下:
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <--指定要執(zhí)行的定時(shí)任務(wù)類--> <--指定執(zhí)行任務(wù)的方法名稱--> class="org.springframework.scheduling.quartz.CronTrig-gerBean"> <--設(shè)置要運(yùn)行的時(shí)間--> <--注冊(cè)定時(shí)器--> <--注入定時(shí)器實(shí)體-->
3)在Web項(xiàng)目中啟動(dòng)定時(shí)服務(wù).部分代碼如下:
…………
org.springframework.web.context.ContextLoaderListener
………
3.3 兩種方式的比較
這兩種方式實(shí)現(xiàn)的開(kāi)發(fā)步驟基本都一樣,在Spring中使用Timer實(shí)現(xiàn)定時(shí)器的功能,并沒(méi)有減少代碼量,只提供了一種使用Timer的解決方案,其原理比較簡(jiǎn)單、實(shí)現(xiàn)起來(lái)也方便容易,適用于執(zhí)行簡(jiǎn)單重復(fù)任務(wù).缺點(diǎn)是不能指定具體的時(shí)間,還必須得繼承指定的類.
使用Quartz實(shí)現(xiàn)定時(shí)器,Spring將任意類中的任意方法注冊(cè)為定時(shí)任務(wù),不僅可以靈活設(shè)定定時(shí)器啟動(dòng)的時(shí)間,還可以利用定時(shí)器參數(shù)的設(shè)置代替了原有的代碼量,提高了系統(tǒng)的靈活性,減少了文件數(shù)量.因此Spring中的Quartz應(yīng)用比較廣泛.
本文結(jié)合Spring框架的核心優(yōu)勢(shì),利用反向控制模式將對(duì)象之間的依賴注入到定時(shí)器的軟件實(shí)現(xiàn)中,將對(duì)象之間的依賴關(guān)系交給Spring,降低組件之間的耦合性,讓我們更專注于應(yīng)用邏輯.
[1] 馮 濤,李 鵬,崔炳得.在Web應(yīng)用中實(shí)現(xiàn)計(jì)劃任務(wù)調(diào)度.河北工程技術(shù)高等??茖W(xué)校學(xué)報(bào),2006,3(1):41-43
[2] 郭 峰.Spring從入門到精通.北京:清華大學(xué)出版社,2006
[3] ROB Harrop,JAN Machacek.Pro Spring中文版.夏 昕,譯.北京:電子工業(yè)出版社,2006
[4] 薛 峰,梁 鋒,徐書勛,等.基于Spring MVC框架的Web研究與應(yīng)用.合肥工業(yè)大學(xué)學(xué) 報(bào)(自然科學(xué)版),2012,35(3):337-340
The Application of Spring Timer
ZHAO Xiaoli
(Computer Science Department, Changzhi University, Changzhi 046011, China)
Combined with?the working principle of timer and the lightweight Spring framework architecture. In this paper, on the basis of the operation principle and process of the timer , construct the repeated task plan through a simple configuration relying on Spring , and demonstrated the advantages of the Spring framework to achieve the timer.
timing device; Timer;Quatz
2015-10-20 基金項(xiàng)目:山西省教研項(xiàng)目“基于云計(jì)算的虛擬實(shí)驗(yàn)教學(xué)改革研究“(J2014113).
趙曉麗(1980-),女,河北臨西人,長(zhǎng)治學(xué)院計(jì)算機(jī)系講師,主要研從事計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用技術(shù)研究.
1672-2027(2015)04-0048-06
TP391.13
A