日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Quartz.Net进阶之四:CronTrigger 详述

發布時間:2025/3/15 asp.net 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Quartz.Net进阶之四:CronTrigger 详述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

?? ?一、CronTrigger 對象概述

?? ??? ?如果您需要一個基于類似日歷的概念而不是基于SimpleTrigger的指定確切間隔來重復的觸發執行作業計劃,那么CronTrigger通常比SimpleTrigger更有用。
?? ??? ?
?? ??? ?使用CronTrigger,您可以指定諸如“每個星期五中午”或“每個工作日早上9:30”,甚至“每個星期一、星期三和星期五上午9:00至10:00之間的每5分鐘”的觸發時間表。
?? ??? ?即便如此,像SimpleTrigger一樣,CronTrigger也有一個startTime屬性,用于指定計劃何時生效,以及一個(可選的)endTime屬性,用于指定何時停止計劃。

?? ?二、Cron表達式

?? ??? ?Cron-Expressions用于配置CronTrigger的實例。 Cron-Expressions是實際上由七個子表達式組成的字符串,用于描述計劃的各個細節。 這些子表達式用空格分隔,表示:

?? ??? ?1.Seconds

?? ??? ?1.Minutes

?????? ??? ??? ?1.Hours

?????? ??? ??? ?1.Day-of-Month

?????? ??? ??? ?1.Month

?????? ??? ??? ?1.Day-of-Week

?????? ??? ??? ?1.Year (optional field)

?? ??? ?完整的cron表達式的一個例子是字符串“0 0 12? * WED“ - 表示”每周三中午12點“。

?? ??? ?單個子表達式可以包含范圍和/或列表。例如,前一個示例(讀作“WED”)中的星期日字段可以用“MON-FRI”、“MON,WED,FRI”甚至“MON-WED,SAT”替換。

?? ??? ?通配符(''字符)可用于表示該字段的“每個”可能值。 因此,前一個例子的“月”字段中的''字符僅表示“每個月”。 周日字段中的'*'顯然意味著“一周中的每一天”。

?? ??? ?所有字段都有一組可以指定的有效值。這些值應該是相當明顯的,比如數字0到59表示秒和分鐘,數值0到23表示小時。每月的日期可以是0-31的任何值,但您需要注意一個月內的天數!月份可以指定為0到11之間的值,或者使用字符串JAN、FEB、MAR、APR、MAY、JUN、JUL、AUG、SEP、OCT、NOV和DEC。星期幾可以指定為1到7之間的值(1 =星期日)或使用字符串SUN,MON,TUE,WED,THU,FRI和SAT。

?? ??? ?'/'字符可用于指定值的增量。 例如,如果在“分鐘”字段中輸入“0/15”,則表示“每隔15分鐘,從零分鐘開始”。 如果您在“分鐘”字段中使用“3/20”,則表示“每小時每20分鐘一次,從第3分鐘開始” - 或者換句話說,它與在“分鐘”中指定“3,23,43”相同。

?? ??? ?“?”字符允許用于日期和星期字段。 它用于指定“無特定值”。 當您需要在兩個字段之一中指定某些內容而不是另一個字段時,這非常有用。 請參閱下面的示例(和CronTrigger API文檔)以獲得說明。

?? ??? ?“L”字符允許用于日期和星期字段。 這個字符是“last”的簡寫,但它在兩個字段的中具有不同的含義。 例如,日期字段中的“L”值表示“月份的最后一天” -? 1月31日,非閏年2月28日。 如果在星期字段中單獨使用,則僅表示“7”或“SAT”。如果在星期字段中在另一個值后使用了“L”,則表示“該月的最后一個xxx日” - 例如“6L”或“FRIL”均表示“該月的最后一個星期五”。 使用“L”選項時,重要的是不要指定列表或值范圍,因為您得到的結果并不是你想要的。

?? ??? ?'W'用于指定最接近給定日期的工作日(周一至周五)。 例如,如果您指定“15W”作為日期字段的值,則含義為:“最接近的工作日到該月的15日”。

?? ??? ?‘#’這個詞是用來指定這個月的“第n個”XXX工作日。例如,星期幾字段中的“6#3”或“FRI#3”的值表示“本月的第三個星期五”。


?? ?三、示例 Cron 表達式

?? ??? ?以下是表達式及其含義的更多示例 - 您可以在CronTrigger的API文檔中找到更多

?? ??? ?CronTrigger示例1? - 用于創建觸發器的表達式,該觸發器每5分鐘觸發一次

?? ??? ??? ?"0 0/5 * * * ?"

?? ??? ?CronTrigger示例2? - 用于創建觸發器的表達式,該觸發器在每分鐘10秒后(即上午10:00:10,上午10:05:10等)每5分鐘觸發一次。

?? ??? ??? ?"10 0/5 * * * ?"

?? ??? ?CronTrigger示例3? - 用于創建觸發器的表達式,該觸發器在每周三和周五的10:30,11:30,12:30和13:30觸發。

?? ??? ??? ?"0 30 10-13 ? * WED,FRI"

?? ??? ?CronTrigger示例4? - 用于創建觸發器的表達式,該觸發器在每個月的5日和20日上午8點到上午10點之間每半小時觸發一次。 請注意,觸發器不會在上午10:00,即8:00,8:30,9:00和9:30觸發

?? ??? ??? ?"0 0/30 8-9 5,20 * ?"

?? ??? ?請注意,某些計劃要求過于復雜,無法通過單個觸發器表達 - 例如“上午9:00至上午10:00之間每隔5分鐘,下午1:00至晚上10:00之間每20分鐘”。 此方案中的解決方案是創建兩個觸發器,并注冊它們以運行相同的作業。
?? ??? ?

?? ?四、建立CronTriggers

?? ??? ?CronTrigger實例是使用TriggerBuilder(用于觸發器的主要屬性)和WithCronSchedule擴展方法(用于特定于CronTrigger的屬性)構建的。

?? ??? ?您還可以使用CronScheduleBuilder的靜態方法來創建計劃。

?? ??? ?建立一個觸發器,每天上午8點到下午5點之間每隔一分鐘觸發一次:

1 trigger = TriggerBuilder.Create() 2 .WithIdentity("trigger3", "group1") 3 .WithCronSchedule("0 0/2 8-17 * * ?") 4 .ForJob("myJob", "group1") 5 .Build();


?? ??? ?構建一個觸發器,每天上午10:42觸發:

1 // we use CronScheduleBuilder's static helper methods here 2 trigger = TriggerBuilder.Create() 3 .WithIdentity("trigger3", "group1") 4 .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(10, 42)) 5 .ForJob(myJobKey) 6 .Build(); 7 8 或者 9 10 trigger = TriggerBuilder.Create() 11 .WithIdentity("trigger3", "group1") 12 .WithCronSchedule("0 42 10 * * ?") 13 .ForJob("myJob", "group1") 14 .Build();


?? ??? ?構建一個觸發器,該觸發器將在星期三上午10點42分在TimeZone中觸發,而不是系統的默認值:

1 trigger = TriggerBuilder.Create() 2 .WithIdentity("trigger3", "group1") 3 .WithSchedule(CronScheduleBuilder 4 .WeeklyOnDayAndHourAndMinute(DayOfWeek.Wednesday, 10, 42) 5 .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time"))) 6 .ForJob(myJobKey) 7 .Build(); 8 9 或者 10 11 trigger = TriggerBuilder.Create() 12 .WithIdentity("trigger3", "group1") 13 .WithCronSchedule("0 42 10 ? * WED", x => x 14 .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time"))) 15 .ForJob(myJobKey) 16 .Build();



?? ?五、CronTrigger Misfire 說明

?? ??? ?以下說明可用于告知Quartz當CronTrigger發生失效時它應該做什么。 (在本教程的“更多關于觸發器”部分中介紹了失效情況)。 這些指令以常量定義(并且API文檔具有對其行為的描述)。 說明包括:

?? ??? ??? ?
?? ??? ???? MisfireInstruction.IgnoreMisfirePolicy

?? ??? ???? MisfireInstruction.CronTrigger.DoNothing

?? ??? ???? MisfireInstruction.CronTrigger.FireOnceNow

?? ??? ?所有觸發器都可以使用MisfireInstrution.SmartPolicy指令,該指令也是所有觸發器類型的默認指令。 CronTrigger將“smart policy”指令解釋為MisfireInstruction.CronTrigger.FireOnceNow。 CronTrigger.UpdateAfterMisfire()方法的API文檔解釋了此行為的確切詳細信息。

?? ??? ?在構建CronTriggers時,您將失效指令指定為cron調度的一部分(通過WithCronSchedule擴展方法):

1 trigger = TriggerBuilder.Create() 2 .WithIdentity("trigger3", "group1") 3 .WithCronSchedule("0 0/2 8-17 * * ?", x => x 4 .WithMisfireHandlingInstructionFireAndProceed()) 5 .ForJob("myJob", "group1") 6 .Build();



?? ?六、總結

?? ??? ?  今天要寫的內容差不多了,由于個人的翻譯水平有限,可能存在不正確的地方,為了讓大家可以看到原文,這樣可以有個更好的理解,我也把原地址貼出來。原文地址如下:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/crontriggers.html

?? ??? ?不忘初心,繼續努力。

轉載于:https://www.cnblogs.com/PatrickLiu/p/10101964.html

總結

以上是生活随笔為你收集整理的Quartz.Net进阶之四:CronTrigger 详述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。