天天看點

四:Trigger

Trigger 也有很多類型,最常見的有兩種 trigger 分别在後面教程中分别介紹

Trigger 的公共屬性

所有類型的 trigger 都有 Trigger 這個屬性,表示 trigger 的身份;除此之外,trigger 還有很多其他公共屬性。這些屬性,在建構 trigger 的時候可以通過 TriggerBuilder 設定。

trigger 的公共屬性

屬性名稱 介紹
jobKey 當 trigger 觸發時被執行的 job 的身份
startTime 設定 trigger 第一次觸發的時間;該屬性的值是 java.util.Date 類型,表示某個指定的時間點
endTime 表示 trigger 失效的時間點

優先級

如果你的 trigger 很多,Quartz 可能沒有足夠的資源同時觸發所有 trigger;這種情況下米可能希望控制哪些 trigger 優先使用 Quartz 的工作線程,要達到該目的,你可以在 trigger 上設定 prioriry 屬性。

注意:隻有同時觸發 trigger 之間才會比較優先級。如果 trigger 是可恢複的,在恢複後在調用,優先級與原先 trigger 是一樣的。

錯過觸發(misfire)

tirgger 還有一個重要的屬性 misfire;如果 scheduler 關閉了,或者 Quartz 線程池中沒有可用的線程來執行 job,此時持久性的 trigger 就會錯過(miss) 其觸發時間,及錯過觸發(missfire)。不同類型的 trigger,有不同的 missfire 機制,他們都預設使用“智能機制”(smart policy),即根據 trigger 的類型和配置動态調整行為。當 scheduler 啟動的時候,查詢所有錯過觸發的持久性 trigger。然後根據他們各自的 misfire 機制更新 trigger 資訊。

月曆(calendar)

Quartz 的 calendar 對象可以在定義和存儲 trigger 的時候與 trigger 進行關聯。Calendar 用于從 trigger 的排程計劃中排除時間段,比如,可以建立 trigger,每個工作日志的上午 9.30 執行,然後增加一個 Calendar,排除掉所有商業節日。

HolidayCalendar cal = new HolidayCalendar();
    cal.addExcludedDate( someDate );
    cal.addExcludedDate( someOtherDate );

    sched.addCalendar("myHolidays", cal, false);


    Trigger t = newTrigger()
        .withIdentity("myTrigger")
        .forJob("myJob")
        .withSchedule(dailyAtHourAndMinute(, )) // execute job daily at :
        .modifiedByCalendar("myHolidays") // but not on holidays
        .build();

    // .. schedule job with trigger

    Trigger t2 = newTrigger()
        .withIdentity("myTrigger2")
        .forJob("myJob2")
        .withSchedule(dailyAtHourAndMinute(, )) // execute job daily at :
        .modifiedByCalendar("myHolidays") // but not on holidays
        .build();