Quartz.NET 2.x 文件翻譯 - Lesson 6:CronTrigger觸發模式
Quartz.NET 2.x 文件翻譯 - Lesson 6:CronTrigger觸發模式 檢視官網英文原文
CronTriggers一般情況下比SimpleTrigger更加靈活和方便,如果我們需要按照日曆日期來執行job而非按照固定的時間間隔來執行排程,那麼肯定是CronTriggers更加合適了。
使用CronTrigger,我們可以設定執行時間點為“每星期五中午”,或“每週日上午9:30”,甚至可是是“每星期一星期三和星期五上午9:00點到午10:00每5分鐘執行一次”。
當然想SimpleTrigger一樣,CronTrigger也有開始執行時間點,排程結束時間點等。
Cron Expressions
Cron表示式被用於配置CronTrigger例項,Cron表示式是一個7個子表示式組成的字串,分別表示不同的排程時間點。這些子表示式之間以空格分割,分別表示:
- Seconds 秒
- Minutes 分
- Hours 時
- Day-of-Month 日
- Month 月
- Day-of-Week 周
- Year (optional field) 年
單個子表示式可以包含範圍和/或列表,比如,周欄位可以是“MON-FRI”、“MON, WED, FRI”,甚至“MON-WED,SAT”也可以。
''字元可以用來標示任意值在節點中,比如上面例子Month節點說到的意義,意思就是任何月份,每個月。*字元在Day-Of—Week就表示周的每一天。
所有子節點都可以指定時間點,這些時間點必須是明確可用的,比如對於seconds分鐘來說,我們可以寫0-59這樣的數字,對於hour小時來說,我們寫0-23之間的數字,對於Day-of-Month來說就需要寫0-31之間的數字,當然Day-of-Month的時候需要注意月份到底有多少天。對於Months來說就是0-11之間了,或者我們也可以使用JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV 和 DEC來表示月份,Days-of-Week的話就是1-7之間,當然也是可以使用SUN, MON, TUE, WED, THU, FRI 和 SAT。
/ 字元可以用來指定增量值,比如,如果我們把'0/15'填寫在Minutes節點,意思就是從0分開始,每十五分鐘支援一次,如果我們填寫‘3/20’,意思就是從3分開始,每二十分鐘執行一次,再解釋下就是在一小時內,在3,23,43分鐘的時候會執行。
? 字元允許day-of-month 和 day-of-week 的任一天,主要用於沒有指定數值。當我們需要指定是哪個子節點的時候是有用的,一會看下面的例子來解釋。
L 字元用於限定day-of-month 和 day-of-week,是last的簡寫,在兩個子節點有不同的意義,比如day-of-month中意味著月份的最後一天,比如一月份的31,閏年二月份的28等,在 day-of-week 中意味著一週的最後一天7或者SAT。如果在day-of-week中使用數值+L的方式,這意思是月當中的最後一個數值天,比如6L或者FRIL,就是月中最後一個星期五,需要注意的是,如果我們使用了L引數,就不要在混合集合或者數值區間,這樣會導致指定的日期混亂。
W 字元用於指定星期(星期一到星期五)工作日中最近的一天,比如我們要指定15w,意思就是當前月中最近的第十五個工作日。
# 字元用於指定月當中第幾個工作日,比如day-of-week中設定6#3或者FRI#3,意思就是月當中第三個週五。
Example Cron Expressions
下面我們舉些例子,更多的可以參考api文件查詢例子1 - 每間隔五分鐘觸發一次
"0 0/5 * * * ?"
例子2 - 每間隔五分鐘的第10秒執行一次
"10 0/5 * * * ?"
例子3 - 每週3,週五的10:30, 11:30, 12:30和13:30執行
"0 30 10-13 ? * WED,FRI"
例子4 - 每月第五天和第二十天的 8:00, 8:30, 9:00 和 9:30執行
"0 0/30 8-9 5,20 * ?"
注意:有時候可能要求執行的排程比較複雜,那麼簡單方案就是我們進行拆分,將複雜的排程拆成多個觸發器,並行即可。
Building CronTriggers
CronTrigger例項使用TriggerBuilder和WithCronSchedule擴充套件方法進行建立。我們也可以使用CronScheduleBuilder 的靜態方法建立排程。
例子1:每天上午8點到下午5點中,每2分鐘執行一次
trigger = TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithCronSchedule("0 0/2 8-17 * * ?") .ForJob("myJob", "group1") .Build();例子2:每天10:42執行
// we use CronScheduleBuilder's static helper methods here trigger = TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(10, 42)) .ForJob(myJobKey) .Build();也可以是:
trigger = TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithCronSchedule("0 42 10 * * ?") .ForJob("myJob", "group1") .Build();例子3:每週三10:42,在指定的時區內
trigger = TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithSchedule(CronScheduleBuilder .WeeklyOnDayAndHourAndMinute(DayOfWeek.Wednesday, 10, 42) .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time"))) .ForJob(myJobKey) .Build();或者是:
trigger = TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithCronSchedule("0 42 10 ? * WED", x => x .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time"))) .ForJob(myJobKey) .Build();
CronTrigger Misfire Instructions
下面說的是在CronTrigger發生misfire的時候通知Quartz做什麼,關於Misfire參照前面講過的章節,這些指令都被定義為常量,指令主要有:- MisfireInstruction.IgnoreMisfirePolicy
- MisfireInstruction.CronTrigger.DoNothing
- MisfireInstruction.CronTrigger.FireOnceNow
所有的triggers觸發器和觸發器型別都有MisfireInstrution.SmartPolicy通知指令,就是MisfireInstruction.CronTrigger.FireOnceNow,CronTrigger.UpdateAfterMisfire()方法的api詳細解釋了細節。
當我們建立CronTrigger的時候,misfire指令也是我們需要配置到排程資訊中的(通過WithCronSchedule擴充套件方法):
trigger = TriggerBuilder.Create() .WithIdentity("trigger3", "group1") .WithCronSchedule("0 0/2 8-17 * * ?", x => x .WithMisfireHandlingInstructionFireAndProceed()) .ForJob("myJob", "group1") .Build();
由龐順龍最後編輯於:3年前
內容均為作者獨立觀點,不代表八零IT人立場,如涉及侵權,請及時告知。
相關文章
- Quartz.NET 2.x 文件翻譯 - Lesson 5:SimpleTrigger觸發模式quartz模式
- Quartz.NET 2.x 文件翻譯 - Lesson 4:更多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 2:Jobs 和 Triggersquartz
- Quartz.NET 2.x 文件翻譯 - Lesson 7:TriggerListeners 和JobListenersquartz
- Quartz.NET 2.x 文件翻譯 - Lesson 10:Configuration, Resource Usage 和 SchedulerFactoryquartz
- Quartz.NET 2.x 文件翻譯 - Lesson 3:Jobs 和 Triggers深入瞭解quartz
- Quartz.NET 2.x 文件翻譯 - Lesson 11:Advanced (Enterprise) Features 高階功能quartz
- Quartz.NET 2.x 文件翻譯 - Lesson 12:Quartz的其他各種特性quartz
- Quartz.NET 2.x 文件翻譯-文章目錄quartz
- 文件翻譯器怎麼用?如何翻譯Word文件?
- 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
- docker官方文件翻譯4Docker
- Draft 文件翻譯 - API - ContentStateRaftAPI
- TailWind文件翻譯說明以及每日翻譯進度AI
- HTTPie 官方文件中文翻譯版HTTP
- SpringAop英文文件部分翻譯Spring
- Gin 框架中文文件(翻譯)框架
- BBNorm官方指導文件翻譯ORM
- 文件翻譯軟體怎麼用?怎麼把Excel文件翻譯成中文版Excel
- oc-plugin-book 文件協作翻譯外掛(類似 LearnKu.com 的文件翻譯)Plugin
- SQLAlchemy 2.0 中文文件翻譯完成SQL
- 重新翻譯版本|Redux-Reselect 文件Redux
- Draft 文件翻譯 - 快速開始 - 概念Raft