1. 程式人生 > >artz學習——Quartz大致介紹(一)

artz學習——Quartz大致介紹(一)

http://blog.csdn.net/u010648555/article/details/54863144

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
對比:

型別 優點 缺點
RAMJobStore 不要外部資料庫,配置容易,執行速度快 因為排程程式資訊是儲存在被分配給JVM的記憶體裡面,所以,當應用程式停止執行時,所有排程資訊將被丟失。另外因為儲存到JVM記憶體裡面,所以可以儲存多少個Job和Trigger將會受到限制
JDBCJobStore 支援叢集,因為所有的任務資訊都會儲存到資料庫中,可以控制事物,還有就是如果應用伺服器關閉或者重啟,任務資訊都不會丟失,並且可以恢復因伺服器關閉或者重啟而導致執行失敗的任務 執行速度的快慢取決與連線資料庫的快慢

4. 表關係和解釋

  • 表關係

    這裡寫圖片描述

  • 解釋

表名稱 說明
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. 核心類和關係

  1. 核心類
    (1)核心類
    QuartzSchedulerThread :負責執行向QuartzScheduler註冊的觸發Trigger的工作的執行緒。
    ThreadPool:Scheduler使用一個執行緒池作為任務執行的基礎設施,任務通過共享執行緒池中的執行緒提供執行效率。
    QuartzSchedulerResources:包含建立QuartzScheduler例項所需的所有資源(JobStore,ThreadPool等)。
    SchedulerFactory :提供用於獲取排程程式例項的客戶端可用控制代碼的機制。
    JobStore: 通過類實現的介面,這些類要為org.quartz.core.QuartzScheduler的使用提供一個org.quartz.Job和org.quartz.Trigger儲存機制。作業和觸發器的儲存應該以其名稱和組的組合為唯一性。
    QuartzScheduler :這是Quartz的核心,它是org.quartz.Scheduler介面的間接實現,包含排程org.quartz.Jobs,註冊org.quartz.JobListener例項等的方法。
    Scheduler :這是Quartz Scheduler的主要介面,代表一個獨立執行容器。排程程式維護JobDetails和觸發器的登錄檔。 一旦註冊,排程程式負責執行作業,當他們的相關聯的觸發器觸發(當他們的預定時間到達時)。
    Trigger :具有所有觸發器通用屬性的基本介面,描述了job執行的時間出發規則。 - 使用TriggerBuilder例項化實際觸發器。
    JobDetail :傳遞給定作業例項的詳細資訊屬性。 JobDetails將使用JobBuilder建立/定義。
    Job:要由表示要執行的“作業”的類實現的介面。只有一個方法 void execute(jobExecutionContext context)
    (jobExecutionContext 提供排程上下文各種資訊,執行時資料儲存在jobDataMap中)
    Job有個子介面StatefulJob ,代表有狀態任務。
    有狀態任務不可併發,前次任務沒有執行完,後面任務處於阻塞等到。
  2. 關係-自己理解

這裡寫圖片描述

一個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:10

7.JDBC插入表順序

主要的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

8.參考文章

Quartz專欄系列