1. 程式人生 > >淺談Quartz

淺談Quartz

    近期閒來無事簡單的研究了一下任務排程框架(當然你可以可以稱它為工具,看問題的角度不同,在這裡我稱它為框架)---Quartz,在這裡和大家分享一下。

  1. OpenSymphony提供的強大的開源任務排程框架。
  2. 官網:http://www.quartz-scheduler.org/ 。
  3. Quartz是純java實現。
  4. Quartz的特點:
    1. 強大的排程功能
    2. 靈活的應用方式
    3. 分散式和叢集能力
  5. Quartz主要用到的設計模式:
    1. Builder模式
    2. Factory模式
    3. 元件模式
    4. 鏈式寫法
  6. Quartz體系結構:
    1. Quartz的三個核心概念:排程器,任務,觸發器。
    2. Quartz重要組成:Job,JobDetail,JobBuilder,JobStore,Trigger,TriggerBuilder,ThreadPool,Schedular,Calender,監聽器(JobListener,TriggerListener,SchedulerListener)。Quartz大概有300個類組成。  
  7. 淺談Job:
    1. 實現業務邏輯的任務介面。
    2. Job介面非常容易實現,只有一個execute方法,在裡面編寫業務邏輯。
    3. 每次排程器執行job時,它在呼叫execute方法之前會建立一個新的job例項。

    4. 當呼叫完成後,關聯的job物件例項會被釋放,釋放的例項會被垃圾回收機制回收。

  8. 淺談JobDetail:JobDetail為Job例項提供了許多設定屬性,以及JobDataMap成員變數屬性,它用來儲存特定Job例項的狀態資訊,排程器需要藉助JobDetail物件來新增Job例項。

  9. JobExecutionContext是什麼?                                                                                                                                                     當Scheduler呼叫一個Job,就會將JobExecutionContext傳遞給Job的execute()方法。 Job能通過JobExecutionContext物件訪問到Quart執行時候的環境以及Job本身的明細資料。

  10. JobDataMap是什麼?

    1. 在進行任務排程時JobDataMap儲存在JobExecutionContext中,非常方便獲取。

    2. JobDataMap可以用來裝載任何可序列化的資料物件,當Job例項物件被執行時這些引數物件會傳遞給它。

    3. JobDataMap實現了JDK的Map介面,並且添加了一些非常方便的方法來存取基本資料型別。

  11. 獲取JobDetail和Trigger中自定義引數的兩種方式:

    1. 通過JobExecutionContext例項獲取JobDateMap物件,使用該物件中的方法獲取。

    2. 在Job實現類中新增getter/setter方法(Quartz框架預設的JobFactory實現類在初始化job例項物件時會自動呼叫這些setter方法將引數值傳過來)。

  12. 淺談Trigger:

    觸發器通用屬性:

           JobKey: Job例項的標識,觸發器被觸發時,該指定的Job例項會執行。

           StartTime: 首次被觸發的時間。它的值的型別是Java.util.Date。

           EndTime: 指定觸發器不在被觸發的時間。它的值的型別是Java.util.Date。

  13. 使用SimpleTrigger需要注意的幾點:

    1. 重複次數可以為:0,正整數或者是SimpleTrigger.REPEAT_INDEFINITELY常量值。

    2. 重複執行間隔必須為0或長整數。

    3. .一旦被指定了endTime引數,那麼它會覆蓋重複執行次數引數的效果。

  14. 淺談CronTrigger:

    1. 基於日曆的作業排程器,而不是像SimpleTrigger那樣精確指定間隔時間,比SimpleTrigger更常用。

    2. Cron表示式:用於配置CronTrigger例項,是由7個子表示式組成的字串,描述了時間表的詳細資訊,格式:[秒] [分] [小時] [日] [月] [周] [年]。

    3. 我們還可以使用線上生成器幫我們生成:http://cron.qqe2.com/

  15. 淺談Scheduler:

    1. SchedulerFactory的兩個實現類:StdSchedulerFactory 和DirectSchedulerFactory。

    2. StdSchedulerFactory:

      1. 使用一組引數(Java.util.Properties)來建立和初始化Quartz排程器。
      2. 配置引數一般儲存在quartz.properties中。
      3. 呼叫getScheduler方法就能建立和初始化物件。
  16. quartz.properties組成部分:排程器屬性,執行緒池屬性,作業儲存屬性,外掛配置。

好了,今天就給大家總結到這裡,歡迎大家吐槽拍磚。