quartz任務(wù)調(diào)度--詳細(xì)教程_第1頁(yè)
已閱讀1頁(yè),還剩18頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Quartz任務(wù)調(diào)度快速入門(mén)1概述概述各種企業(yè)應(yīng)用幾乎都會(huì)碰到任務(wù)調(diào)度的需求,就拿論壇來(lái)說(shuō):每隔半個(gè)小時(shí)生成精華文章的RSS文件,每天凌晨統(tǒng)計(jì)論壇用戶(hù)的積分排名,每隔30分鐘執(zhí)行鎖定用戶(hù)解鎖任務(wù)。對(duì)于一個(gè)典型的MIS系統(tǒng)來(lái)說(shuō),在每月1號(hào)凌晨統(tǒng)計(jì)上個(gè)月各部門(mén)的業(yè)務(wù)數(shù)據(jù)生成月報(bào)表,每半個(gè)小時(shí)查詢(xún)用戶(hù)是否已經(jīng)有快到期的待處理業(yè)務(wù)……,這樣的例子俯拾皆是,不勝枚舉。任務(wù)調(diào)度本身涉及到多線程并發(fā)、運(yùn)行時(shí)間規(guī)則制定和解析、場(chǎng)景保持與恢復(fù)、線程池維護(hù)

2、等諸多方面的工作。如果直接使用自定義線程這種刀耕火種的原始辦法,開(kāi)發(fā)任務(wù)調(diào)度程序是一項(xiàng)頗具挑戰(zhàn)性的工作。Java開(kāi)源的好處就是:領(lǐng)域問(wèn)題都能找到現(xiàn)成的解決方案。OpenSymphony所提供的Quartz自2001年發(fā)布版本以來(lái)已經(jīng)被眾多項(xiàng)目作為任務(wù)調(diào)度的解決方案,Quartz在提供巨大靈活性的同時(shí)并未犧牲其簡(jiǎn)單性,它所提供的強(qiáng)大功能使你可以應(yīng)付絕大多數(shù)的調(diào)度需求。Quartz在開(kāi)源任務(wù)調(diào)度框架中的翹首,它提供了強(qiáng)大任務(wù)調(diào)度機(jī)制,難能可

3、貴的是它同時(shí)保持了使用的簡(jiǎn)單性。Quartz允許開(kāi)發(fā)人員靈活地定義觸發(fā)器的調(diào)度時(shí)間表,并可以對(duì)觸發(fā)器和任務(wù)進(jìn)行關(guān)聯(lián)映射。此外,Quartz提供了調(diào)度運(yùn)行環(huán)境的持久化機(jī)制,可以保存并恢復(fù)調(diào)度現(xiàn)場(chǎng),即使系統(tǒng)因故障關(guān)閉,任務(wù)調(diào)度現(xiàn)場(chǎng)數(shù)據(jù)并不會(huì)丟失。此外,Quartz還提供了組件式的偵聽(tīng)器、各種插件、線程池等功能。了解了解QuartzQuartz體系結(jié)構(gòu)體系結(jié)構(gòu)Quartz對(duì)任務(wù)調(diào)度的領(lǐng)域問(wèn)題進(jìn)行了高度的抽象,提出了調(diào)度器、任務(wù)和觸發(fā)器這3個(gè)核

4、心的概念,并在g.quartz通過(guò)接口和類(lèi)對(duì)重要的這些核心概念進(jìn)行描述:●Job:是一個(gè)接口,只有一個(gè)方法voidexecute(JobExecutionContextcontext),開(kāi)發(fā)者實(shí)現(xiàn)該接口定義運(yùn)行任務(wù),JobExecutionContext類(lèi)提供了調(diào)度上下文的各種信息。Job運(yùn)行時(shí)的信息保存在JobDataMap實(shí)例中;●JobDetail:Quartz在每次執(zhí)行Job時(shí),都重新創(chuàng)建一個(gè)Job實(shí)例,所以它不直接接受一個(gè)Jo

5、b的實(shí)例,相反它接收一個(gè)Job實(shí)現(xiàn)類(lèi),以便運(yùn)行時(shí)通過(guò)newInstance()的反射機(jī)制實(shí)例化Job。因此需要通過(guò)一個(gè)類(lèi)來(lái)描述Job的實(shí)現(xiàn)類(lèi)及其它相關(guān)的靜態(tài)信息,如Job名字、描述、關(guān)聯(lián)監(jiān)聽(tīng)器等信息,JobDetail承擔(dān)了這一角色。Job有一個(gè)StatefulJob子接口,代表有狀態(tài)的任務(wù),該接口是一個(gè)沒(méi)有方法的標(biāo)簽接口,其目的是讓Quartz知道任務(wù)的類(lèi)型,以便采用不同的執(zhí)行方案。無(wú)狀態(tài)任務(wù)在執(zhí)行時(shí)擁有自己的JobDataMap拷貝

6、,對(duì)JobDataMap的更改不會(huì)影響下次的執(zhí)行。而有狀態(tài)任務(wù)共享共享同一個(gè)JobDataMap實(shí)例,每次任務(wù)執(zhí)行對(duì)JobDataMap所做的更改會(huì)保存下來(lái),后面的執(zhí)行可以看到這個(gè)更改,也即每次執(zhí)行任務(wù)后都會(huì)對(duì)后面的執(zhí)行發(fā)生影響。正因?yàn)檫@個(gè)原因,無(wú)狀態(tài)的Job可以并發(fā)執(zhí)行,而有狀態(tài)的StatefulJob不能并發(fā)執(zhí)行,這意味著如果前次的StatefulJob還沒(méi)有執(zhí)行完畢,下一次的任務(wù)將阻塞等待,直到前次任務(wù)執(zhí)行完畢。有狀態(tài)任務(wù)比無(wú)狀態(tài)

7、任務(wù)需要考慮更多的因素,程序往往擁有更高的復(fù)雜度,因此除非必要,應(yīng)該盡量使用無(wú)狀態(tài)的Job。如果Quartz使用了數(shù)據(jù)庫(kù)持久化任務(wù)調(diào)度信息,無(wú)狀態(tài)的JobDataMap僅會(huì)在Scheduler注冊(cè)任務(wù)時(shí)保持一次,而有狀態(tài)任務(wù)對(duì)應(yīng)的JobDataMap在每次執(zhí)行任務(wù)后都會(huì)進(jìn)行保存。Trigger自身也可以擁有一個(gè)JobDataMap,其關(guān)聯(lián)的Job可以通過(guò)JobExecutionContext#getTrigger().getJobDat

8、aMap()獲取Trigger中的JobDataMap。不管是有狀態(tài)還是無(wú)狀態(tài)的任務(wù),在任務(wù)執(zhí)行期間對(duì)Trigger的JobDataMap所做的更改都不會(huì)進(jìn)行持久,也即不會(huì)對(duì)下次的執(zhí)行產(chǎn)生影響。Quartz擁有完善的事件和監(jiān)聽(tīng)體系,大部分組件都擁有事件,如任務(wù)執(zhí)行前事件、任務(wù)執(zhí)行后事件、觸發(fā)器觸發(fā)前事件、觸發(fā)后事件、調(diào)度器開(kāi)始事件、關(guān)閉事件等等,可以注冊(cè)相應(yīng)的監(jiān)聽(tīng)器處理感興趣的事件。圖1描述了Scheduler的內(nèi)部組件結(jié)構(gòu),Sched

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論