Quartz2.2.x官方文檔2.2.X—第三章 5.SimpleTrigger

Quartz 教程


Table of Contents | ‹ Lesson 4 | Lesson 6 ›

課程 5: SimpleTrigger

SimpleTrigger 應該可以滿足你的調度需求,如果你需要在一個特定時間完成一個工作,或者在一個指定的時間內重複執行。例如,你想要觸發器在2015年1月13日11:23:54秒AM觸發,或者你想它在這個時間點每10秒再觸發5次。

有了這些描述,你可能會發現一個SimpleTrigger觸發器包含:start-time、end-time、repeat count,和repeat interval。這些屬性都是你所瞭解的,只有一些對於end-time屬性的特殊說明。

重複次數可以爲0,一個正數,或者一個常量值SimpleTigeer.REPEAT_INDEFINITELY。重複間隔屬性必須是0,或者一個正long類型,表示幾毫秒。注意重複講個爲0將會導致"重複次數"的的觸發器觸發在同時執行。

如果你還不熟悉Quartz的DateBulder類,你可能會發現它有助於幫助你計算你觸發器的觸發時間,根據你創建的StartTime(或者endTime)。

endTime屬性(如果你指定了) 覆蓋重複計數屬性。如果你希望創建一個觸發器,例如每10秒觸發一次,直到某個時間 - 而不是計算它在開始時間和結束時間的重複次數,你可以指定結束時間,然後使用REPEAT_INDEFINITELY的重複次數。

SimpleTrigger實例使用TriggerBuider構建(關於觸發器的主要屬性)和SimpleScheduleBuider() instances are built using TriggerBuilder (for the trigger’s main properties) and SimpleScheduleBuilder (SimpleTrigger-specific屬性). 使用DSL風格構建,使用靜態導入如下所示:


import static org.quartz.TriggerBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import static org.quartz.DateBuilder.*:

下面是定義簡單調度程序觸發器的各種例子,通讀一遍,他們每一個都至少有一點新的/不同點。

在無重複情況,構造一個指定時間的觸發器:


  SimpleTrigger trigger = (SimpleTrigger) newTrigger()
    .withIdentity("trigger1", "group1")
    .startAt(myStartTime) // some Date
    .forJob("job1", "group1") // identify job with name, group strings
    .build();

構造一個指定時間開始的觸發器,接着每十秒執行1次,執行10次:


  trigger = newTrigger()
    .withIdentity("trigger3", "group1")
    .startAt(myTimeToStartFiring)  // if a start time is not given (if this line were omitted), "now" is implied
    .withSchedule(simpleSchedule()
        .withIntervalInSeconds(10)
        .withRepeatCount(10)) // note that 10 repeats will give a total of 11 firings
    .forJob(myJob) // identify job with handle to its JobDetail itself                   
    .build();

構造一個在未來5分鐘觸發一次的觸發器:


  trigger = (SimpleTrigger) newTrigger()
    .withIdentity("trigger5", "group1")
    .startAt(futureDate(5, IntervalUnit.MINUTE)) // use DateBuilder to create a date in the future
    .forJob(myJobKey) // identify job with its JobKey
    .build();

構造一個當前時間開始的觸發器,每5分鐘觸發一次,直到22:00分結束:


  trigger = newTrigger()
    .withIdentity("trigger7", "group1")
    .withSchedule(simpleSchedule()
        .withIntervalInMinutes(5)
        .repeatForever())
    .endAt(dateOf(22, 0, 0))
    .build();

構造一個在一小時內將會觸發的觸發器,接着每2小時觸發一次,直到永遠:


  trigger = newTrigger()
    .withIdentity("trigger8") // because group is not specified, "trigger8" will be in the default group
    .startAt(evenHourDate(null)) // get the next even-hour (minutes and seconds zero ("00:00"))
    .withSchedule(simpleSchedule()
        .withIntervalInHours(2)
        .repeatForever())
    // note that in this example, 'forJob(..)' is not called
    //  - which is valid if the trigger is passed to the scheduler along with the job  
    .build();

    scheduler.scheduleJob(trigger, job);

花費些時間思考定義TriggerBuilder和SimpleScheduleBuider的所有可用方法,這樣你就可以熟悉你所有的選項,而這些選項上面例子可能沒有。

注意TriggerBuilder (Quartz的其他構造器)沒有顯示指定屬性時,會默認設置一個合理的屬性。例如: 如果你沒有調用*withIdentity*之一的方法,那麼TriggerBuilder將會自動生成一個隨機trigger的名字;如果你沒有調用*startAt(..)*那麼就會假定使用當前時間。

SimpleTrigger失敗指令

SimpleTrigger有幾個指令可用用來告知Quartz在失敗時做什麼。(失敗情況在課程4:更多Triggers介紹)。這些指令被定義爲SimpleTrigger的常量(包括JavaDoc所介紹的行爲)。這些指令包含:

SimpleTrigger失敗指令常量


MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY
MISFIRE_INSTRUCTION_FIRE_NOW
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT

你可以回憶一下之前的課程,所有觸發器都有可使用的Trigger.MISFIRE_INSTRUCTION_SMART_POLICY指令, 這個指令也是觸發器類型的默認值。

如果使用"智能"策略,SimpleTrigger會自動選擇在多種失敗策略中選擇, 基於配置和SimpleTrigger實例的狀態。JavaDoc的 SimpleTrigger.updateAfterMisfire()方法解釋這種動態行爲信息。

當構建SimpleTriggers, 你可以設置簡單調度程序的失敗指令(通過SimpleSchedulerBuilder):


  trigger = newTrigger()
    .withIdentity("trigger7", "group1")
    .withSchedule(simpleSchedule()
        .withIntervalInMinutes(5)
        .repeatForever()
        .withMisfireHandlingInstructionNextWithExistingCount())
    .build();

 

代碼段 小部件

Code snippet widgets

輕靈劃譯

數據來源:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章