1. 介紹
Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源項目,是徹底由java開發的一個開源的任務日程管理系統,「任務進度管理器」就是一個在預先肯定(被歸入日程)的時間到達時,負責執行(或者通知)其餘軟件組件的系統。
Quartz用一個小Java庫發佈文件(.jar文件),這個庫文件包含了全部Quartz核心功能。這些功能的主要接口(API)是Scheduler接口。它提供了簡單的操做,例如:將任務歸入日程或者從日程中取消,開始/中止/暫停日程進度。
2. 定時器種類
Quartz 中五種類型的 Trigger:SimpleTrigger,CronTirgger,DateIntervalTrigger,NthIncludedDayTrigger和Calendar 類( org.quartz.Calendar)。
最經常使用的:
SimpleTrigger:用來觸發只需執行一次或者在給定時間觸發而且重複N次且每次執行延遲必定時間的任務。
CronTrigger:按照日曆觸發,例如「每一個週五」,每月10日中午或者10:15分。
3. 存儲方式
RAMJobStore和JDBCJobStore
對比:java
類型 | 優勢 | 缺點 |
---|---|---|
RAMJobStore | 不要外部數據庫,配置容易,運行速度快 | 由於調度程序信息是存儲在被分配給JVM的內存裏面,因此,當應用程序中止運行時,全部調度信息將被丟失。另外由於存儲到JVM內存裏面,因此能夠存儲多少個Job和Trigger將會受到限制 |
JDBCJobStore | 支持集羣,由於全部的任務信息都會保存到數據庫中,能夠控制事物,還有就是若是應用服務器關閉或者重啓,任務信息都不會丟失,而且能夠恢復因服務器關閉或者重啓而致使執行失敗的任務 | 運行速度的快慢取決與鏈接數據庫的快慢 |
4. 表關係和解釋mysql
表關係sql
解釋數據庫
表名稱 | 說明 |
---|---|
qrtz_blob_triggers | Trigger做爲Blob類型存儲(用於Quartz用戶用JDBC建立他們本身定製的Trigger類型,JobStore 並不知道如何存儲實例的時候) |
qrtz_calendars | 以Blob類型存儲Quartz的Calendar日曆信息, quartz可配置一個日從來指定一個時間範圍 |
qrtz_cron_triggers | 存儲Cron Trigger,包括Cron表達式和時區信息。 |
qrtz_fired_triggers | 存儲與已觸發的Trigger相關的狀態信息,以及相聯Job的執行信息 |
qrtz_job_details | 存儲每個已配置的Job的詳細信息 |
qrtz_locks | 存儲程序的非觀鎖的信息(假如使用了悲觀鎖) |
qrtz_paused_trigger_graps | 存儲已暫停的Trigger組的信息 |
qrtz_scheduler_state | 存儲少許的有關 Scheduler的狀態信息,和別的 Scheduler 實例(假如是用於一個集羣中) |
qrtz_simple_triggers | 存儲簡單的 Trigger,包括重複次數,間隔,以及已觸的次數 |
qrtz_triggers | 存儲已配置的 Trigger的信息 |
qrzt_simprop_triggers |
5. 核心類和關係服務器
5. 核心類和關係併發
一個job能夠被多個Trigger 綁定,可是一個Trigger只能綁定一個job!源碼分析
6. 配置文件
quartz.properties
//調度標識名 集羣中每個實例都必須使用相同的名稱 (區分特定的調度器實例)
org.quartz.scheduler.instanceName:DefaultQuartzScheduler
//ID設置爲自動獲取 每個必須不一樣 (全部調度器實例中是惟一的)
org.quartz.scheduler.instanceId :AUTO
//數據保存方式爲持久化
org.quartz.jobStore.class :org.quartz.impl.jdbcjobstore.JobStoreTX
//表的前綴
org.quartz.jobStore.tablePrefix : QRTZ_
//設置爲TRUE不會出現序列化非字符串類到 BLOB 時產生的類版本問題
//org.quartz.jobStore.useProperties : true
//加入集羣 true 爲集羣 false不是集羣
org.quartz.jobStore.isClustered : false
//調度實例失效的檢查時間間隔
org.quartz.jobStore.clusterCheckinInterval:20000
//允許的最大做業延長時間
org.quartz.jobStore.misfireThreshold :60000
//ThreadPool 實現的類名
org.quartz.threadPool.class:org.quartz.simpl.SimpleThreadPool
//線程數量
org.quartz.threadPool.threadCount : 10
//線程優先級
org.quartz.threadPool.threadPriority : 5(threadPriority 屬性的最大值是常量 java.lang.Thread.MAX_PRIORITY,等於10。最小值爲常量 java.lang.Thread.MIN_PRIORITY,爲1)
//自建立父線程
//org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true
//數據庫別名
org.quartz.jobStore.dataSource : qzDS
//設置數據源
org.quartz.dataSource.qzDS.driver:com.mysql.jdbc.Driver
org.quartz.dataSource.qzDS.URL:jdbc:mysql://localhost:3306/quartz
org.quartz.dataSource.qzDS.user:root
org.quartz.dataSource.qzDS.password:123456
org.quartz.dataSource.qzDS.maxConnection:10ui
7.JDBC插入表順序spa
主要的JDBC操做類,執行sql順序。
Simple_trigger :插入順序
qrtz_job_details —> qrtz_triggers —> qrtz_simple_triggers
qrtz_fired_triggers
Cron_Trigger:插入順序
qrtz_job_details —> qrtz_triggers —> qrtz_cron_triggers
qrtz_fired_triggers.net
8.參考文章
官網: http://www.quartz-scheduler.org/
深刻解讀Quartz的原理 :http://lavasoft.blog.51cto.com/62575/181907/
基於 Quartz 開發企業級任務調度應用 :http://www.ibm.com/developerworks/cn/opensource/os-cn-quartz/
quartz 數據庫表含義解釋 :http://blog.csdn.net/tengdazhang770960436/article/details/51019291
Quartz源碼分析: https://my.oschina.net/chengxiaoyuan/blog/664833
http://blog.csdn.net/u010648555/article/category/6601767
原文地址:http://blog.csdn.net/u010648555/article/details/54863144