詳細講解Quartz如何從入門到精通
Quartz是一個開源的作業排程框架,它完全由Java 寫成,並設計用於J2SE和J2EE應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執行一個作業而建立簡單的或複雜的排程。它有很多特徵, 如:資料庫支援,叢集,外掛,EJB作業預構建,JavaMail及其它,支援cron-like表示式等等。
本文內容
1、Quartz讓任務排程簡單
2、Quartz的發展史
3、上手Quartz
4、Quartz內部架構
5、作業
6、作業管理和儲存
7、有效作業儲存
8、作業和觸發器
9、排程一個作業
10、用排程器(Scheduler)呼叫你的作業
11、程式設計排程同聲明性排程
12、有狀態和無狀態作業
13、Quartz框架的其他特徵
14、Quartz下一步計劃
15、瞭解更多Quartz特徵
你曾經需要應用執行一個任務嗎?這個任務每天或每週星期二晚上11:30,或許僅僅 每個月的最後一天執行。一個自動執行而無須干預的任務在執行過程中如果發生一個嚴重錯誤,應用能夠知到其執行失敗並嘗試重新執行嗎?你和你的團隊是用 Java程式設計嗎?如果這些問題中任何一個你回答是,那麼你應該使用Quartz排程器。
旁註:Matrix目前就大量使用到了Quartz。比如,排名統計功能的實現,在Jmatrix裡通過Quartz定義了一個定時排程作業,在每天凌晨一點,作業開始工作,重新統計大家的Karma和排名等。
還有,RSS檔案的生成,也是通過Quartz定義作業,每隔半個小時生成一次RSS XML檔案。
所以Quartz使用的地方很多,本文無疑是一篇很好的入門和進階的文章,在此,感謝David w Johnson的努力!
Quartz讓作業排程簡單
Quartz是一個完全由Java編寫的開源作業排程框架。不要讓作業排程這個術語 嚇著你。儘管Quartz框架整合了許多額外功能,但就其簡易形式看,你會發現它易用得簡直讓人受不了!。簡單地建立一個實現 org.quartz.Job介面的Java類。Job介面包含唯一的方法:
在你的Job介面實現類裡面,新增一些邏輯到execute()方法。一旦你配置好Job實 現類並設定好排程時間表,Quartz將密切注意剩餘時間。當排程程式確定該是通知你的作業的時候,Quartz框架將呼叫你Job實現類(作業類)上的 execute()方法並允許做它該做的事情。無需報告任何東西給排程器或呼叫任何特定的東西。僅僅執行任務和結束任務即可。如果配置你的作業在隨後再次 被呼叫,Quartz框架將在恰當的時間再次呼叫它。
如果你使用了其它流行的開源框架象struts,你會對Quartz的設計和部件
感到舒適。雖然兩個開源工程是解決完全不同的問題,還是有很多相似的之處,就是開源軟體使用者每天感覺很舒適。Quartz能用在單機J2SE應用中,作為
一個RMI伺服器,也可以用在web應用中,甚至也可以用在J2EE應用伺服器中。
Quartz的發展史
儘管Quartz今年開始受到人們注意,但還是暫時流行。Quartz由James House建立並最初於2001年春天被加入sourceforge工程。接下來的幾年裡,有許多新特徵和版本出現,但是直到專案遷移到新的站點併成為 OpenSymphony專案家族的一員,才開始真正啟動並受到應有的關注。
James House仍然和幾個協助他的業餘開發者參與大量開發工作。Quartz開發團隊今年能釋出幾個新版本,包括當前正處在候選釋出階段的1.5版。
上手Quartz
Quartz工程駐留在OpenSymphony站點上。在Quartz站點上可以找到許多有用的資源:JavaDocs,包含指南的文件,CVS訪問,使用者和開發者論壇的連線,當然也有下載。
從下載連線取得Quartz的釋出版本,並且解壓到到本地目錄。這個下載檔案包含了 一個預先構建好的Quartz二進位制檔案(quartz.jar),你可以將它放進自己的應用中。Quartz框架只需要少數的第三方庫,並且這些三方庫 是必需的,你很可能已經在使用這些庫了。
你要把Quartz的安裝目錄的/lib/core 和 /lib/optional目錄中的第三方庫加進你自己的工程中。大多數第三方庫是我們所熟知和喜歡的標準Jakarta Commons庫,像Commons Logging, Commons BeantUtils等等。
quartz.properties檔案
Quartz有一個叫做quartz.properties的配置檔案,它允許你修 改框架執行時環境。預設是使用Quartz.jar裡面的quartz.properties檔案。當然,你應該建立一個 quartz.properties檔案的副本並且把它放入你工程的classes目錄中以便類裝載器找到它。quartz.properties樣本文 件如例1所示。
例1.quartz.properties檔案允許修改Quartz執行環境:
一旦將Quartz.jar檔案和第三方庫加到自己的工程裡面並且quartz.properties檔案在工程的classes目錄中,就可以建立作業了。然而,在做這之前,我們暫且迴避一下先簡短討論一下Quartz架構。
Quartz內部架構
在規模方面,Quartz跟大多數開源框架類似。大約有300個Java類和介面,
並被組織到12個包中。這可以和Apache
Struts把大約325個類和介面以及組織到11個包中相比。儘管規模幾乎不會用來作為衡量框架質量的一個特性,但這裡的關鍵是quarts內含很多功
能,這些功能和特性集是否成為、或者應該成為評判一個開源或非開源框架質量的因素。
Quartz排程器
Quartz框架的核心是排程器。排程器負責管理Quartz應用執行時環境。排程器不是靠自己做所有的工作,而是依賴框架內一些非常重要的部件。Quartz不僅僅是執行緒和執行緒管理。為確保可伸縮性,Quartz採用了基於多執行緒的架構。
啟動時,框架初始化一套worker執行緒,這套執行緒被排程器用來執行預定的作業。這 就是Quartz怎樣能併發執行多個作業的原理。Quartz依賴一套鬆耦合的執行緒池管理部件來管理執行緒環境。本文中,我們會多次提到執行緒池管理,但 Quartz裡面的每個物件是可配置的或者是可定製的。所以,例如,如果你想要插進自己執行緒池管理設施,我猜你一定能!
作業
用Quartz的行話講,作業是一個執行任務的簡單Java類。任務可以是任何Java程式碼。只需你實現org.quartz.Job介面並且在出現嚴重錯誤情況下丟擲JobExecutionException異常即可。
Job介面包含唯一的一個方法execute(),作業從這裡開始執行。一旦實現了Job介面和execute()方法,當Quartz確定該是作業執行的時候,它將呼叫你的作業。Execute()方法內就完全是你要做的事情。下面有一些你要在作業裡面做事情的例子:
· 用JavaMail(或者用其他的像Commons Net一樣的郵件框架)傳送郵件
· 建立遠端介面並且呼叫在EJB上的方法
· 獲取Hibernate Session,查詢和更新關係資料庫裡的資料
· 使用OSWorkflow並且從作業呼叫一個工作流
· 使用FTP和到處移動檔案
· 呼叫Ant構建指令碼開始預定構建
這種可能性是無窮的,正事這種無限可能性使得框架功能如此強大。Quartz給你提供了一個機制來建立具有不同粒度的、可重複的排程表,於是,你只需建立一個Java類,這個類被呼叫而執行任務。
作業管理和儲存
作業一旦被排程,排程器需要記住並且跟蹤作業和它們的執行次數。如果你的作業是30 分鐘後或每30秒呼叫,這不是很有用。事實上,作業執行需要非常準確和即時呼叫在被排程作業上的execute()方法。Quartz通過一個稱之為作業 儲存(JobStore)的概念來做作業儲存和管理。
有效作業儲存
Quartz提供兩種基本作業儲存型別。第一種型別叫做RAMJobStore,它利用通常的記憶體來持久化排程程式資訊。這種作業儲存型別最容易配置、構造和執行。對許多應用來說,這種作業儲存已經足夠了。
然而,因為排程程式資訊是儲存在被分配給JVM的記憶體裡面,所以,當應用程式停止執行時,所有排程資訊將被丟失。如果你需要在重新啟動之間持久化排程資訊,則將需要第二種型別的作業儲存。
第二種型別的作業儲存實際上提供兩種不同的實現,但兩種實現一般都稱為JDBC作業 儲存。兩種JDBC作業儲存都需要JDBC驅動程式和後臺資料庫來持久化排程程式資訊。這兩種型別的不同在於你是否想要控制資料庫事務或這釋放控制給應用 伺服器例如BEA's WebLogic或Jboss。(這類似於J2EE領域中,Bean管理的事務和和容器管理事務之間的區別)這兩種JDBC作業儲存是:
· JobStoreTX:當你想要控制事務或工作在非應用伺服器環境中是使用
· JobStoreCMT:當你工作在應用伺服器環境中和想要容器控制事務時使用。
JDBC作業儲存為需要排程程式維護排程資訊的使用者而設計。
作業和觸發器
Quartz設計者做了一個設計選擇來從排程分離開作業。Quartz中的觸發器用來告訴排程程式作業什麼時候觸發。框架提供了一把觸發器型別,但兩個最常用的是SimpleTrigger和CronTrigger。SimpleTrigger為需要簡單打火排程而設計。
典型地,如果你需要在給定的時間和重複次數或者兩次打火之間等待的秒數打火一個作業,那麼SimpleTrigger適合你。另一方面,如果你有許多複雜的作業排程,那麼或許需要CronTrigger。
CronTrigger是基於Calendar-like排程的。當你需要在除星期六和星期天外的每天上午10點半執行作業時,那麼應該使用CronTrigger。正如它的名字所暗示的那樣,CronTrigger是基於Unix克隆表示式的。
作為一個例子,下面的Quartz克隆表示式將在星期一到星期五的每天上午10點15分執行一個作業。
0 15 10 ? * MON-FRI |
下面的表示式
0 15 10 ? * 6L 2002-2005 |
將在2002年到2005年的每個月的最後一個星期五上午10點15分執行作業。你不可能用SimpleTrigger來做這些事情。你可以用兩者之中的任何一個,但哪個跟合適則取決於你的排程需要。
相關推薦
詳細講解Quartz如何從入門到精通
Quartz是一個開源的作業排程框架,它完全由Java 寫成,並設計用於J2SE和J2EE應用中。它提供了巨大的靈活性而不犧牲簡單性。你能夠用它來為執行一個作業而建立簡單的或複雜的排程。它有很多特徵, 如:資料庫支援,叢集,外掛,EJB作業預構建,JavaMail及其它,支援
詳細講解Quartz如何從入門到精通二
排程一個作業 讓我們通過看一個例子來進入實際討論。現假定你管理一個部門,無論何時候客戶在它的FTP伺服器上儲存一個檔案,都得用電子郵件通知它。我們的作業將用FTP登陸到遠端伺服器並下載所有找到的檔案。 然後,它將傳送一封含有找到和下載的檔案數量的電子郵件。這個作業很容易就幫助
Java從入門到精通(詳細) 明日科技
精通 ima tle alt border title 入門 ges href Java從入門到精通(詳細) 明日科技
安卓學習筆記 -- (安裝環境) Android Studio安裝配置、環境搭建詳細步驟及基本使用 Android Studio和SDK官方開發工具下載 Android Studio教程從入門到精通 Android開發-之第一個程式:HelloWorld!
1、下載Android Studio安裝配置、環境搭建詳細步驟及基本使用 https://www.cnblogs.com/yanglh6-jyx/p/Android_AS_Configuration.html https://blog.csdn.net/k491022087/ar
手把手教你ExtJS從入門到放棄——篇四(Ext.window元件API詳細講解及demo演示)
1.開啟API找到Ext--》window --》window 2.灰色齒輪代表是個元件,xtype是別名,就像前面MessageBox的別名是Msg一樣,使用別名是一樣的效果,點進原始碼可以看到是進行了引用的賦值 3.第一個元件:Ext.window.Windo
爬蟲入門到精通-headers的詳細講解(模擬登入知乎)
直接開始案例吧。 本次我們實現如何模擬登陸知乎。 1.抓包 首先開啟知乎登入頁 知乎 - 與世界分享你的知識、經驗和見解 注意開啟開發者工具後點擊“preserve log”,密碼記得故意輸入錯誤,然後點選登入 我們很簡單的就找到了 我們需要的請
【邢不行|量化小講堂系列26-數字貨幣篇】OKEX交易所詳細介紹——小白從入門到精通
引言: 邢不行的系列帖子“量化小講堂”,通過實際案例教初學者使用python進行量化投資,瞭解行業研究方向,希望能對大家有幫助。 【歷史文章彙總】請點選此處 個人微信:coinquant,有問題歡迎交流。 本系列文章中用到的數字貨幣、A股資料可在www.y
[轉]從入門到精通: 最小費用流的“zkw算法”
值範圍 add turn 所有 運行時 static col sap 上下 >>>> 原文地址:最小費用流的“zkw算法” <<<< 1. 網絡流的一些基本概念 很多同學建立過網絡流模型做題目, 也
從零開始系列-Caffe從入門到精通之一 環境搭建
python 資源暫時不可用 強制 rec htm color 查看 cpu blog 先介紹下電腦軟硬件情況吧: 處理器:Intel? Core? i5-2450M CPU @ 2.50GHz × 4 內存:4G 操作系統:Ubuntu Kylin(優麒麟) 16.04
3ds Max從入門到精通
問題 正常 man 鏡頭 cfg 其中 合成 平臺 halo 1. 軟件的下載與安裝 這裏用的是3ds Max2009簡體中文版 32位 在 Win7上運行記得打上sp2補丁,不然會有bug。 2. 3ds Max的歷史 3ds Max前身為運行於PC機DOS平臺上的
Spring4.0從入門到精通視頻教程 - 1. Spring的特點
spring4.0從入門到精通視頻教程 java 第三方 開發 輕量級:Spring 是非侵入性的 - 基於 Spring 開發的應用中的對象可以不依賴於 Spring 的 API依賴註入(DI --- dependency injection、IOC)面向切面編程(AOP --- aspec
Spring4.0從入門到精通視頻教程 - 2. 安裝SPRING TOOL SUITE
spring4.0從入門到精通視頻教程 spring tool suite 1、找到與eclipse版本配套的SPRING TOOL SUITE。http://spring.io/tools/sts/all2、Help -> Install New Software...3、Click Add.
MySQL基礎知識(MySQL從入門到精通觀後感)
alter mes times 值範圍 model 。。 字符編碼 不同的 精通 17/7/9 1.主從式架構(Client-server model)或客戶端-服務器(Client-Server)結構簡稱C/S結構,是一種網絡架構,通常在該網絡架構下軟件分為客戶端和服務器
閱讀《Android 從入門到精通》(33)——Intent 分類
data- provide 推斷 gadget nload bat exceptio extra 有時 Intent 分類 顯式 Intent:Intent("android.intent.action.CALL", Uri.parse(&qu
《Android開發從入門到精通》扶松柏.掃描版.pdf
工具 機制 網絡 條碼 referer 列表 simple ott 賬號 下載地址:網盤下載 內容簡介 編輯 《Android開發從入門到精通》系統講解了Android軟件開發的基礎知識,圖文並茂地幫助讀者學習和掌握SDK、開發流程以及常用的API
glide從入門到精通使用
golang go glide 入門介紹不論是開發Java還是你正在學習的Golang,都會遇到依賴管理問題。Java有牛逼轟轟的Maven和Gradle。 Golang亦有godep、govendor、glide、gvt、gopack等等,本文主要給大家介紹gilde。 glide是Golang的包管理工
4.區塊鏈平臺以太坊從入門到精通之 以太幣
tps 圖形化 三種 lan 了解 市場 ref 圖形化界面 tar 1.以太幣簡介 以太幣( ether) 是以太坊中使用的貨幣的名字.它是用於支付在虛擬機中的運算的費用. 了解就可以 2.獲取和發送以太幣 有三種方式獲取 1.成為一名礦工
(轉)Android開發書籍推薦:從入門到精通系列學習路線書籍介紹
成長 程序員 理論 targe base 官方 app als 自己的 Android開發書籍推薦:從入門到精通系列學習路線書籍介紹 轉自:http://blog.csdn.net/findsafety/article/details/52317506 很多時候我們都會
Oracle 11g從入門到精通pdf
過程 ise color clas relative 第2章 stat nbsp ext 下載地址:網盤下載 內容要點編輯本書是針對Oracle公司最新推出的大型數據庫管理系統Oracle 11g編寫的,循環漸進地介紹了Oracle的基本知識。其內容包括四大部分:Orac
Timelion教程 - 從入門到精通
強制 setting 免費 多少 命名 每天 .cn ssi 範圍 Timelion Tutorial – From Zero to Hero 本教程是與官方Elastic博客交叉刊登的。 Timelion是Kibana時間序列的可視化工具。時間序列可視化是可視化的