當前位置:名人名言大全網 - 笑話大全 - 詳細解釋壹下石英是如何從入門到精通的。

詳細解釋壹下石英是如何從入門到精通的。

Quartz是壹個開源的作業調度框架,完全用Java編寫,設計用於J SE和J EE應用。它在不犧牲簡單性的情況下提供了極大的靈活性。您可以使用它來創建簡單或復雜的作業執行計劃。它有很多特性,比如支持集群插件EJB作業的數據庫,預先構建的JavaMail和其他類似cron的表達式。

您是否曾經需要應用程序來執行任務?該任務每天或每周二晚上或每月最後壹天自動執行,無需幹預。如果在執行過程中出現嚴重錯誤,應用程序能否知道其執行失敗並嘗試再次執行?妳和妳的團隊是用Java編程的嗎?如果妳對這些問題中的任何壹個回答是肯定的,那麽妳應該使用Quartz scheduler。

目前,石英廣泛應用於矩陣,例如,排名統計功能的實現。在Jmatrix中,Quartz定義了壹個調度作業,每天淩晨壹點開始工作,重新統計每個人的因果報應和排名,生成RSS文件。Quartz還定義了每半小時生成RSS XML文件的作業。

Quartz使作業調度變得簡單。

Quartz是壹個完全由Java編寫的開源作業調度框架。不要讓作業計劃這個術語嚇到妳。雖然Quartz framework集成了很多額外的功能,但是在其簡單的形式下,妳會發現它根本無法忍受使用!簡單地創建壹個實現quartz作業接口的Java類作業接口包含獨特的方法。

向作業接口實現類中的execute()方法添加壹些邏輯。壹旦您配置了作業實現類並設置了調度計劃,Quartz將密切關註剩余時間。當調度器確定通知您的是作業時,Quartz framework將在您的作業實現類(job class)上調用execute()。方法,並允許它做它應該做的事情,而不需要向調度程序報告任何事情或調用任何特定的東西,只需要執行任務並結束它。如果您將作業配置為稍後再次調用,Quartz框架將在合適的時間再次調用它。

如果您使用其他流行的開源框架,如struts,您會對Quartz的設計和組件感到滿意。雖然兩個開源項目解決的問題完全不同,但還是有很多相似之處,那就是開源軟件的用戶每天都感覺很舒服。Quartz可以用作獨立的J SE應用程序、RMI服務器、web應用程序甚至J2EE應用程序服務器。

石英的發展歷史

雖然石英是今年才開始引起人們的關註,但還是暫時受歡迎。Quartz由James House創建,於2008年春首次加入sourcefe項目。在隨後的幾年中,出現了許多新的功能和版本,但直到該項目轉移到新的地點,成為OpenSymphony項目家族的壹員,才真正開始並得到應有的關註。

James House仍然與幾個協助他的業余開發人員壹起參與大量的開發工作。Quartz開發團隊今年可以發布幾個新版本,包括目前處於候選發布階段的版本。

石英入門

Quartz項目位於OpenSymphony網站上,在那裏可以找到許多有用的資源。JavaDocs包含指南文檔,CVS訪問用戶和開發者論壇,當然還有下載。

從下載連接中獲取Quartz的發布版本,並將其解壓縮到本地目錄。這個下載文件包含壹個預構建的quartz jar,您可以將它放入自己的應用程序中。Quartz框架只需要幾個第三方庫,這些第三方庫是必須的。您可能已經在使用這些庫了。

您應該將Quartz安裝目錄的/lib/core和/lib/optional目錄中的第三方庫添加到您自己的項目中。大多數第三方庫都是我們熟悉和喜歡的標準Jakarta Commons庫,比如Commons Logging Commons Beantuils等等。

Quartz屬性文件

Quartz有壹個名為quartz properties的配置文件,它允許您修改框架運行時環境。默認情況下,使用quartz jar中的Quartz屬性文件。當然,您應該創建壹個quartz屬性文件的副本,並將其放在項目的classes目錄中,以便類加載器可以找到它。

壹旦將Quartz jar文件和第三方庫添加到您自己的項目中,並且Quartz屬性文件位於項目的classes目錄中,您就可以創建作業了。不過,在做這個之前,我們先暫時簡單討論壹下石英架構。

石英內部結構

從規模上來說,Quartz和大多數開源框架差不多,大約10個Java類和接口組織成包,可以和Apache Struts大約10個類和接口組織成包相比。雖然scale很難作為衡量框架好壞的特征,但這裏的關鍵是Quartz是否包含了很多功能,功能集是否成為或者應該成為判斷壹個開源或非開源框架好壞的因素。

石英調度程序

Quartz框架的核心是調度程序,它負責管理Quartz應用程序的運行時環境。調度器本身並不做所有的工作,而是依賴於框架中壹些非常重要的組件。Quartz不僅僅是線程和線程管理。為了保證可擴展性,Quartz采用了多線程架構。

啟動時,框架初始化壹組工作線程,調度程序使用這些線程來執行預定的作業。這就是Quartz可以同時運行多個任務的原理。Quartz依靠壹個松散耦合的線程池管理組件來管理線程環境。在本文中,我們將多次提到線程池管理,但Quartz中的每個對象都是可配置或可定制的,因此,例如,如果您想要自己的線程池管理工具,我想您可以!

家庭作業

在Quartz行話中,作業是壹個執行任務的簡單Java類。任務可以是任何Java代碼,只要實現quartz作業接口並在出現嚴重錯誤時拋出JobExecutionException。

作業接口只包含壹個方法,Execute()。壹旦實現了作業接口和execute()方法,Quartz將在確定作業運行的時間時調用您的作業。execute()方法正是您想要做的。這裏有壹些妳想在工作中做什麽的例子。

使用JavaMail(或使用其他郵件框架,如Commons Net)發送郵件。

創建壹個遠程接口並調用EJB上的方法。

Get Hibernate會話來查詢和更新關系數據庫中的數據。

使用OSWorkflow並從作業中調用工作流。

使用FTP和移動文件。

調用Ant構建腳本來啟動計劃的構建。

這種可能性是無止境的業務。這種無限的可能性使得框架如此強大。Quartz為您提供了壹種機制來構建不同粒度的可重復調度表,因此您只需要創建壹個Java類,調用它來執行任務。

作業管理和存儲

壹旦調度了壹個作業,調度程序就需要記住並跟蹤這些作業及其執行時間。如果妳的工作在幾分鐘後或每秒鐘被調用,這不是很有用。實際上,作業執行需要非常準確和即時地調用調度作業上的execute()方法Quartz,通過壹個叫做JobStore的概念來存儲和管理作業。

有效工作存儲

Quartz提供了兩種基本的作業存儲類型。第壹種類型稱為RAMJobStore,它使用普通內存來保存調度程序信息。這種作業存儲類型最容易配置、構建和運行,對於許多應用程序來說已經足夠了。

但是,因為調度程序信息存儲在分配給JVM的內存中,所以當應用程序停止運行時,所有的調度信息都將丟失。如果您需要在重新啟動之間保存調度信息,您將需要第二種類型的作業存儲。

第二種類型的作業存儲實際上提供了兩種不同的實現,但這兩種實現通常都被稱為JDBC作業存儲。兩個JDBC作業存儲都需要JDBC驅動程序和後臺數據庫來保存調度程序信息。這兩種類型的區別在於您是希望控制數據庫事務,還是希望將控制釋放給BEA的WebLogic或Jboss之類的應用服務器(這類似於J2EE字段中Bean管理的事務和容器管理的事務之間的區別)。這兩家JDBC求職商店是

當您希望控制事務或在非應用服務器環境中工作時,可以使用Jobstoretx。

當您在應用程序服務器環境中工作,並且想要壹個容器來控制事務時,可以使用Jobstorecmt。

JDBC作業商店是為需要調度程序來維護調度信息的用戶設計的。

作業和觸發器

Quartz設計人員做出了壹個設計選擇,將工作與調度分開。Quartz中的觸發器用於告訴調度程序作業何時觸發。該框架提供了壹種觸發器類型,但最常用的兩種類型是SimpleTrigger和CronTrigger SimpleTrigger,它們是為簡單調度而設計的。

通常,如果您需要在給定的時間和重復次數或兩次照明之間等待的秒數來照明作業,那麽SimpleTrigger適合您。另壹方面,如果您有許多復雜的作業計劃,您可能需要CronTrigger。

CronTrigger是基於類似日歷的調度。當妳除了周六周日,每天早上都需要執行半個半的作業時,就要用CronTrigger了。顧名思義,CronTrigger是基於Unix克隆表達式的。

例如,下面的Quartz clone表達式將在周壹到周五的每天早上執行壹個作業。

?*周壹至周五

下面的表達式

?* L

作業將在每個月的最後壹個星期五早上8: 00執行,從到。妳不能用SimpleTrigger來做這些事情。您可以使用任何壹個,但哪壹個是合適的取決於您的調度需求。

安排工作

讓我們通過看壹個例子來進入實際的討論。現在假設妳管理壹個部門。每當客戶在其FTP服務器上存儲文件時,他必須通過電子郵件通知它,我們的作業將通過FTP登錄到遠程服務器並下載所有找到的文件。

然後,它將發送壹封電子郵件,其中包含找到並下載的文件數量。這項工作可以很容易地幫助人們擺脫整天手動執行這項任務,即使是在晚上。我們可以設置作業周期為每秒檢查壹次,以X模式工作。這就是石英框架的完整目的。

首先,創建壹個作業類來執行FTP和電子郵件邏輯。以下示例顯示了quartz作業類,它實現了Quartz作業接口。

我們有意使ScanFTPSiteJob保持簡單。對於這個例子,我們創建了壹個名為JobUtil的實用程序類。它不是Quartz的壹部分,但是構建壹個可以被各種工作重用的實用程序庫是有意義的。我們可以很容易地將這種代碼組織成壹個作業類,並像Quartz scheduler壹樣使用它。因為我們壹直使用Quartz,所以那些代碼可以繼續重用。

jobutil check for files()和jobutil send email()方法使用的參數是Quartz創建的JobDataMap的實例,它們是為每個作業的執行而創建的。這是壹種將配置參數傳遞給作業類的方法。

這裏沒有展示JobUtil的實現,但是我們可以用Jakarta上的Commons Net輕松實現FTP和Email功能。

使用調度程序調用作業

首先,創建壹個作業,但是為了讓調度程序調用該作業,您必須向調度程序解釋作業的調用時間和頻率。這是由與作業相關的觸發器完成的。因為我們只對每秒循環調用作業感興趣,所以我們打算使用SimpleTrigger。

作業和觸發器通過Quartz調度器界面進行調度。我們需要從調度程序工廠類中獲取調度程序的實例。最簡單的方法是在StdSchedulerFactory類上調用靜態方法getDefaultScheduler()。

使用Quartz框架,您需要調用start()方法來啟動調度程序。該示例的代碼遵循大多數Quartz應用程序的壹般模式,創建壹個或多個作業,創建和設置觸發器,用調度程序調度作業,用觸發器啟動調度程序。

編程調度與聲明性調度相同

我們通過編程來調度我們的ScanFTPSiteJob作業,也就是說,我們使用Java代碼來設置作業和觸發器。Quartz框架還支持xml文件中作業調度的聲明性設置。聲明性方法允許我們修改哪個作業執行得更快。

Quartz框架有壹個插件,負責讀取xml配置文件。xml配置文件包含關於啟動Quartz應用程序和觸發器的信息。xml文件中的所有作業都與相關的觸發器壹起添加到調度程序中。您仍然需要編寫作業類,但是配置這些作業類的調度程序是非常動態的。您可以將xml文件中的元素與示例代碼進行比較。從概念上講,它們是。然而,使用聲明性方法的優點是維護變得非常簡單。只需更改xml配置文件並重啟Quartz應用程序,無需修改代碼、重新編譯或重新部署。

有狀態和無狀態作業

在本文中,您看到的作業是無狀態的,這意味著在作業執行之間不會維護JobDataMap的狀態變化。如果需要添加或刪除JobDataMap的值,並讓作業下次看到這種狀態變化,就需要使用Quartz stateful job。

如果妳是壹個有經驗的EJB開發者,我相信妳會立刻退縮,因為stateful有壹個負面的含義,這主要是由於EJB帶來的可擴展性問題。quartz StatefulJob實現quartz有狀態作業接口。

無狀態作業和有狀態作業的主要區別在於,有狀態作業在每次執行時只有壹個實例。大多數情況下,有狀態作業不會帶來大問題。但是,如果您有壹個需要頻繁執行或需要很長時間才能完成的作業,有狀態作業可能會給您帶來可伸縮性問題。

石英框架的其他特征

Quartz框架具有豐富的特性集。事實上,Quartz的功能太多,無法在壹種情況下了解所有功能。以下是壹些有趣的功能,但這裏沒有時間詳細討論。

監聽器和插件

大家都喜歡聽歌和外掛。今天,幾乎任何開源框架都可以下載。妳壹定會發現支持這兩個概念的listening是妳自己創建的Java類。當壹個關鍵事件發生時,您將收到來自框架的回調。例如,當壹個作業在沒有調度的情況下被調度,或者觸發器終止並且不再觸發時,這些可以被設置為通知您的偵聽器。Quartz框架包括調度程序監聽作業和觸發器監控。您可以將作業和觸發器監控配置為全局監控或特定於作業和觸發器的監控。

壹旦調用了特定的監視器,就可以使用這種技術在monitor類中做自己想做的事情。例如,如果您希望在每個作業結束時發送壹封電子郵件,您可以將此邏輯寫入作業或寫入JobListener。強制松耦合有利於更好的設計。

Quartz插件是壹個新特性,可以在不修改Quartz源代碼的情況下創建並添加到Quartz框架中。它是為那些想擴展Quartz框架而沒有時間向Quartz開發團隊提交更改並等待新版本的開發人員設計的。如果妳熟悉Struts插件,妳就能充分理解Quartz插件的使用。

與其Quartz提供不能滿足您需求的有限擴展點,不如通過使用插件擁有壹個可修改的擴展點

集群石英應用

Quartz應用程序可以水平集群化還是垂直集群化取決於您自己的需求。群集提供了以下好處。

可量測性

參與可用性

負載平衡

目前,Quartz只能在關系數據庫和JDBC作業存儲的幫助下支持集群的未來版本。這種限制將會消失,並且可以在沒有數據庫支持的情況下使用RAMJobStore集群。

Quartz web應用

在使用該框架幾周或幾個月後,Quartz用戶的需求之壹是將Quartz集成到圖形用戶界面中。目前Quartz框架有壹些工具可以讓妳用Java servlet初始化和啟動Quartz。壹旦可以訪問scheduler實例,就可以將其存儲在web容器的ServletContext中,並通過scheduler接口管理調度環境。

幸運的是,壹些開發人員已經在影響獨立的Quartz web應用程序,該應用程序用於更好地管理調度程序環境。構建在幾種流行的開源框架(如Struts和Spring)上的圖形用戶界面支持許多功能,所有這些功能都打包到壹個簡單的界面中。

石英的下壹步計劃

Quartz是壹個活躍的項目。Quartz開發團隊明確表示,Quartz的下壹個主要版本已經推出。妳可以在OpenSymphony的wiki上體驗Quartz的設計和功能。簡而言之,Quartz的用戶每天都可以自由地添加功能建議和設計想法,以便能夠被核心框架考慮(重視)。

了解有關Quartz功能的更多信息

Lishi Xinzhi/Article/program/Java/ky/201311/27892