Quartz.NET 2.x 文件翻譯 - Lesson 4:更多Triggers觸發器說明
Quartz.NET 2.x 文件翻譯 - Lesson 4:更多Triggers觸發器說明 檢視官網英文原文
類似於job任務,Trigger觸發器也是比較簡單實現其觸發工作的,但是也包含了一些我們可以自定義設定的選項,這也是我們在使用Quartz.NET前需要儘量明白和理解的點。此外,就像我們前面的章節探討過一樣,Trigger也有很多種型別的觸發型別,這樣就能最大限度滿足我們在使用過程中的不同排程需求了。
Common Trigger Attributes
事實上,所有的Trigger型別都有各自的TriggerKey來保證獲取跟蹤自身,還有一些其他的公共屬性。這些公共屬性在我們定義Trigger觸發器的時候通過TriggerBuilder建立設定。下面簡單說下這些Trigger觸發器的一些公共屬性:
JobKey 屬性表明了在Trigger工作的時候執行對應標示的job任務
StartTimeUtc 屬性標示Trigger觸發器工作的時候第一個排程生效的時間,格式是DateTimeOffset物件格式。對於一些Trigger型別來說,觸發動作會在排程開始的時候就啟動,對於其他型別來說,僅僅是標記排程開始時間點等。這就意味著我們可以儲存一個排程時間點的規則,比如每月第一天,每週第三天等。
EndTimeUtc 屬性用於標記schedule排程不再執行的時間點,也就是說比如設定了每月第五天執行,並與7月1號結束,那麼就會在6月5號執行最後一次排程任務。
其他相關的屬性,在接下來再細聊。
Priority
有時候當我們有許多的Trigger觸發器的時候(或者多個quartz.net的工作執行緒),quartz.net有可能沒有足夠的系統資源去同時執行排程任務。在這種情況下,我們就希望能控制我們的Trigger觸發器獲取quartz.net空閒工作執行緒,想要實現這一的方式,我們可以在我們的Trigger觸發器設定優先順序屬性,如果有n多個Trigger觸發器需要在同一時間點執行,但是隻有z個的可用工作執行緒(z<n),那麼具有高優先順序的這些z個Trigger觸發器會在這個時間點執行,如果我們不設定Trigger觸發器的優先順序,那麼會預設優先順序為5,優先順序屬性的數值是整數。說明:優先順序屬性只有在Trigger觸發器有相同的觸發時間點的時候才會進行比對執行,比如10:59時間點的觸發器會早於11:00的觸發器。
說明:當一個Trigger觸發器檢測到需要被重新恢復的時候,它的優先順序將恢復和原來的優先順序一樣。
Misfire Instructions
另一個屬性就是misfire未觸發屬性了,這一般發生在quartz.net沒有可用工作執行緒或者是排程被關閉,並持續的發生就會導致任務的misfire。不同的Trigger型別有不同的misfire說明。預設情況下它們使用一個基於配置和Trigger型別的動態行為類似於“智慧策略”的指令。當scheduler排程啟動後,會持續監測發生misfire的Trigger觸發器,然後更新每個Trigger觸發器的各自的misfire指令。當我們在專案中開始使用quartz.net的時候,我們需要做的就是明確瞭解每個Trigger型別各自的misfire屬性,能清晰的瞭解每個的獨立api等。更多關於misfire屬性的說明在後面的Trigger型別章節在詳細說明。Calendars
quartz.net calendar物件實現了ICalendar介面,這樣就可以scheduler排程觸發Trigger的時候依照儲存的時間點執行。Calendar的使用不包括時間段的方式。比如:我們可以建立一個Trigger觸發器,在每個工作日的上午9:30觸發job任務,然後新增一個不包括非工作日的Calendar設定。
Calendar可以是任何可序列化的物件實現iCalendar的介面,就像這樣:
namespace Quartz { public interface ICalendar { string Description { get; set; } ICalendar CalendarBase { set; get; } bool IsTimeIncluded(DateTimeOffset timeUtc); DateTime GetNextIncludedTimeUtc(DateTimeOffset timeUtc); } }雖然calendar可以精確到毫秒,但是我們最需要的可能是某天內,所以為了方便配置,quartz.net提供了HolidayCalendar類來處理這種情況。
Calendar必須例項化,並且通過scheduler的AddCalendar(..)註冊,如果我們使用holidaycalendar,在例項化之後,我們需要使用它的AddExcludedDate(DateTime date) 方法來實現我們想要排除在外的排程時間段。同一個calendar例項可以在多個Trigger觸發器使用:
Calendar Example
HolidayCalendar cal = new HolidayCalendar(); cal.AddExcludedDate(someDate); sched.AddCalendar("myHolidays", cal, false); ITrigger t = TriggerBuilder.Create() .WithIdentity("myTrigger") .ForJob("myJob") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(9, 30)) // execute job daily at 9:30 .ModifiedByCalendar("myHolidays") // but not on holidays .Build(); // .. schedule job with trigger ITrigger t2 = TriggerBuilder.Create() .WithIdentity("myTrigger2") .ForJob("myJob2") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(11, 30)) // execute job daily at 11:30 .ModifiedByCalendar("myHolidays") // but not on holidays .Build(); // .. schedule job with trigger2
Trigger觸發器的詳細建立細節我們在下一個章節在討論,上面的程式碼就是建立兩個觸發器,每一個任務每天都會被觸發,但是calendar設定的跳過時間段任務將會跳過不執行。
在Quartz.Impl.Calendar名稱空間下的ICalendar介面實現,可能也有你需要的。
由龐順龍最後編輯於:3年前
內容均為作者獨立觀點,不代表八零IT人立場,如涉及侵權,請及時告知。
相關文章
- Quartz.NET 2.x 文件翻譯 - Lesson 2:Jobs 和 Triggersquartz
- Quartz.NET 2.x 文件翻譯 - Lesson 5:SimpleTrigger觸發模式quartz模式
- Quartz.NET 2.x 文件翻譯 - Lesson 6:CronTrigger觸發模式quartz模式
- Quartz.NET 2.x 文件翻譯 - Lesson 3:Jobs 和 Triggers深入瞭解quartz
- Quartz.NET 2.x 文件翻譯 - Lesson 8:SchedulerListenersquartz
- Quartz.NET 2.x 文件翻譯 - Lesson 9:JobStoresquartz
- Quartz.NET 2.x 文件翻譯 - Lesson 1:使用Quartzquartz
- Quartz.NET 2.x 文件翻譯 - Lesson 7:TriggerListeners 和JobListenersquartz
- Quartz.NET 2.x 文件翻譯 - Lesson 10:Configuration, Resource Usage 和 SchedulerFactoryquartz
- Quartz.NET 2.x 文件翻譯 - Lesson 11:Advanced (Enterprise) Features 高階功能quartz
- Quartz.NET 2.x 文件翻譯 - Lesson 12:Quartz的其他各種特性quartz
- Quartz.NET 2.x 文件翻譯-文章目錄quartz
- TailWind文件翻譯說明以及每日翻譯進度AI
- 以太坊 web3.js 文件翻譯及說明WebJS
- 文件翻譯器怎麼用?如何翻譯Word文件?
- docker官方文件翻譯4Docker
- [譯] React-Redux 官方 Hooks 文件說明ReactReduxHook
- knife4j api文件使用說明API
- MPAndroidChart文件翻譯Android
- 有ppt文件翻譯軟體嗎?如何翻譯整篇ppt文件
- Moya官方文件翻譯
- 實用的Word文件翻譯方法分享,讓Word文件快速翻譯
- 怎麼翻譯整篇Excel文件?Excel文件翻譯一招搞定Excel
- 怎麼把Excel文件翻譯成中文?Excel文件翻譯方法介紹Excel
- docker官方文件翻譯3Docker
- docker官方文件翻譯5Docker
- docker官方文件翻譯2Docker
- docker官方文件翻譯1Docker
- influxdb官網文件翻譯UX
- SnapKit 中文文件翻譯APK
- rabbitmq 官方文件翻譯-2MQ
- Draft 文件翻譯 - API - ContentStateRaftAPI
- 關於支援OPenACC的編譯器說明編譯
- HTTPie 官方文件中文翻譯版HTTP
- SpringAop英文文件部分翻譯Spring
- Gin 框架中文文件(翻譯)框架
- BBNorm官方指導文件翻譯ORM
- 補充說明之前有錯翻譯那篇,但還沒更改完