1. 程式人生 > >Quartz.Net進階之三:SimpleTrigger詳述

Quartz.Net進階之三:SimpleTrigger詳述

        以前都是將所有的內容放在一篇文章裡,就會導致文章很長,對於學習的人來說,有時候這也是一個障礙。所以,以後我的寫作習慣,我就會把我寫的文章縮短,但是內容不會少,內容更集中。這樣,學習起來也不會很累,很容易看完,也能記得住,不用記得那麼多不相關的東西,學習效率也會越高。好了,開始今天的學習計劃吧,今天我們要介紹的物件就是 SimpleTrigger。

    一、SimpleTrigger 物件概述

        如果您想要在特定時刻只執行一次作業,或者在特定時刻按特定時間間隔重複執行作業,則SimpleTrigger物件完全可以滿足您的日程安排需求。或者用更簡單的說,如果你想讓觸發器在2005年1月13日上午11:23:54開始啟用,然後每隔10秒執行作業5次,這樣的需求,就是 SimpleTrigger 最好的使用場景。
        

        通過此描述,您可能對 SimpleTrigger 物件包含的以下這些屬性並不會感到很驚訝,其屬性包括:開始時間和結束時間、重複計數和重複間隔。所有這些屬性都是您所期望的,只有幾個與結束時間屬性相關的需要特殊標註一下。

        重複的次數可以是零,正整數或常量值SimpleTrigger.RepeatIndefinitely。 重複間隔屬性必須是TimeSpan.Zero或正的TimeSpan值。 請注意,重複間隔為零將導致觸發器的“重複計數”觸發同時發生(或者與排程程式可以管理的同時接近)。

        如果您還不熟悉DateTime類,那麼根據要建立的startTimeUtc(或endTimeUtc),您可能會發現它對計算觸發器觸發時間很有幫助。

        EndTimeUtc屬性(如果已指定)覆蓋重複次數屬性。 如果您希望建立一個觸發器,例如每隔10秒觸發一次,直到給定的時刻 - 而不是必須計算它在開始時間和結束時間之間重複的次數,這可能很有用, 可以簡單地指定結束時間,然後使用RepeatIndefinitely的重複計數(你甚至可以將重複次數設定為一個巨大數字,而且這個數字肯定會超過觸發器在結束時間到來之前實際觸發的次數)。

        SimpleTrigger例項使用TriggerBuilder(針對觸發器的主要屬性)和WithSimpleSchedule擴充套件方法(針對SimpleTrigger特定屬性)來構建。

        1、在特定時刻構建觸發器,不重複:

1             // TriggerBuilder預設建立簡單觸發器,實際上返回ITrigger
2             ISimpleTrigger trigger = (ISimpleTrigger) TriggerBuilder.Create()
3                 .WithIdentity("trigger1", "group1")
4                 .StartAt(myStartTime) // some Date
5                 .ForJob("job1", "group1") //使用名稱,組字串識別作業
6
.Build();


        2、在特定時刻構建觸發器,然後每十秒重複十次:

1             trigger = TriggerBuilder.Create()
2                 .WithIdentity("trigger3", "group1")
3                 .StartAt(myTimeToStartFiring) // 如果沒有給出開始時間(如果省略該行),則表示“現在”
4                 .WithSimpleSchedule(x => x
5 .WithIntervalInSeconds(10) 6 .WithRepeatCount(10)) // 請注意,10次重複將總共觸發11次 7 .ForJob(myJob) //使用JobDetail本身的控制代碼識別作業 8 .Build();


        3、構建一個觸發器,將在未來五分鐘內觸發:

1             trigger = (ISimpleTrigger) TriggerBuilder.Create()
2                 .WithIdentity("trigger5", "group1")
3                 .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Minute)) // 使用DateBuilder在將來建立日期
4                 .ForJob(myJobKey) // 用JobKey標識工作
5                 .Build();



        4、構建一個現在將觸發的觸發器,然後每五分鐘重複一次,直到22:00:

1             trigger = TriggerBuilder.Create()
2                 .WithIdentity("trigger7", "group1")
3                 .WithSimpleSchedule(x => x
4                     .WithIntervalInMinutes(5)
5                     .RepeatForever())
6                 .EndAt(DateBuilder.DateOf(22, 0, 0))
7                 .Build();


        5、構建一個觸發器,在下一個小時的頂部觸發,然後每2小時重複一次,永遠:

 1             trigger = TriggerBuilder.Create()
 2                 .WithIdentity("trigger8") //因為沒有指定組,所以“trigger8”將位於預設組中。
 3                 .StartAt(DateBuilder.EvenHourDate(null)) // 得到下一個偶數小時(分鐘和秒零(“00:00”))
 4                 .WithSimpleSchedule(x => x
 5                     .WithIntervalInHours(2)
 6                     .RepeatForever())
 7                 // 請注意,在此示例中,如果將觸發器與作業一起傳遞給排程程式,則不會呼叫“forJob(..)”  
 8                 .Build();
 9 
10             await scheduler.scheduleJob(trigger, job);


        花一些時間檢視TriggerBuilder定義的語言及其擴充套件方法WithSimpleSchedule中的所有可用方法,以便您熟悉可用的選項,這些選項可能未在上面的示例中演示過。


    二、SimpleTrigger 的 Misfire(啟用失敗) 介紹

        SimpleTrigger有些指令可用於告知Quartz.NET發生啟用失敗時它應該做什麼。(在本教程的“更多關於觸發器”部分中介紹了啟用失敗(Misfire)的情況)。 這些指令在MisfirePolicy.SimpleTrigger上定義為常量(包括描述其行為的API文件)。 說明包括:

        1、SimpleTrigger的Misfire(啟用失敗)指令常量

            1)、MisfireInstruction.IgnoreMisfirePolicy

            2)、MisfirePolicy.SimpleTrigger.FireNow

            3)、MisfirePolicy.SimpleTrigger.RescheduleNowWithExistingRepeatCount

            4)、MisfirePolicy.SimpleTrigger.RescheduleNowWithRemainingRepeatCount

            5)、MisfirePolicy.SimpleTrigger.RescheduleNextWithRemainingCount

            6)、MisfirePolicy.SimpleTrigger.RescheduleNextWithExistingCount


        您應該從早期的課程中回憶一下,所有觸發器都可以使用 MisfirePolicy.SmartPolicy 指令,並且此指令也是所有觸發器型別的預設指令。

        如果使用“智慧策略”指令,SimpleTrigger 將根據給定SimpleTrigger例項的配置資訊和狀態在其各種 MISFIRE 指令之間動態選擇。 SimpleTrigger.UpdateAfterMisfire()方法的文件的解釋了此動態行為的具體的細節內容。

        構建 SimpleTriggers 例項時,將 misfire 指令指定為 SimpleSchedule 的一部分(通過SimpleSchedulerBuilder):

1             trigger = TriggerBuilder.Create()
2                 .WithIdentity("trigger7", "group1")
3                 .WithSimpleSchedule(x => x
4                     .WithIntervalInMinutes(5)
5                     .RepeatForever()
6                     .WithMisfireHandlingInstructionNextWithExistingCount())
7                 .Build();


    三、總結

        今天要寫的內容完成了,但是並不代表 SimpleTrigger 的各個方面都介紹完了。其實還有很多內容沒有說到,這就要靠大家自己的努力。有些人坑你還是很喜歡看原文,那我也把地址貼出來的。原文地址如下:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/simpletriggers.html

        不忘初心,繼續努力。