Quartz.Net进阶之四:CronTrigger 详述
?? ???? 以前都是將所有的內(nèi)容放在一篇文章里,就會(huì)導(dǎo)致文章很長,對(duì)于學(xué)習(xí)的人來說,有時(shí)候這也是一個(gè)障礙。所以,以后我的寫作習(xí)慣,我就會(huì)把我寫的文章縮短,但是內(nèi)容不會(huì)少,內(nèi)容更集中。這樣,學(xué)習(xí)起來也不會(huì)很累,很容易看完,也能記得住,不用記得那么多不相關(guān)的東西,學(xué)習(xí)效率也會(huì)越高。好了,開始今天的學(xué)習(xí)計(jì)劃吧,今天我們要介紹的對(duì)象就是 CronTrigger。
?? ?一、CronTrigger 對(duì)象概述
?? ??? ?如果您需要一個(gè)基于類似日歷的概念而不是基于SimpleTrigger的指定確切間隔來重復(fù)的觸發(fā)執(zhí)行作業(yè)計(jì)劃,那么CronTrigger通常比SimpleTrigger更有用。
?? ??? ?
?? ??? ?使用CronTrigger,您可以指定諸如“每個(gè)星期五中午”或“每個(gè)工作日早上9:30”,甚至“每個(gè)星期一、星期三和星期五上午9:00至10:00之間的每5分鐘”的觸發(fā)時(shí)間表。
?? ??? ?即便如此,像SimpleTrigger一樣,CronTrigger也有一個(gè)startTime屬性,用于指定計(jì)劃何時(shí)生效,以及一個(gè)(可選的)endTime屬性,用于指定何時(shí)停止計(jì)劃。
?? ?二、Cron表達(dá)式
?? ??? ?Cron-Expressions用于配置CronTrigger的實(shí)例。 Cron-Expressions是實(shí)際上由七個(gè)子表達(dá)式組成的字符串,用于描述計(jì)劃的各個(gè)細(xì)節(jié)。 這些子表達(dá)式用空格分隔,表示:
?? ??? ?1.Seconds
?? ??? ?1.Minutes
?????? ??? ??? ?1.Hours
?????? ??? ??? ?1.Day-of-Month
?????? ??? ??? ?1.Month
?????? ??? ??? ?1.Day-of-Week
?????? ??? ??? ?1.Year (optional field)
?? ??? ?完整的cron表達(dá)式的一個(gè)例子是字符串“0 0 12? * WED“ - 表示”每周三中午12點(diǎn)“。
?? ??? ?單個(gè)子表達(dá)式可以包含范圍和/或列表。例如,前一個(gè)示例(讀作“WED”)中的星期日字段可以用“MON-FRI”、“MON,WED,FRI”甚至“MON-WED,SAT”替換。
?? ??? ?通配符(''字符)可用于表示該字段的“每個(gè)”可能值。 因此,前一個(gè)例子的“月”字段中的''字符僅表示“每個(gè)月”。 周日字段中的'*'顯然意味著“一周中的每一天”。
?? ??? ?所有字段都有一組可以指定的有效值。這些值應(yīng)該是相當(dāng)明顯的,比如數(shù)字0到59表示秒和分鐘,數(shù)值0到23表示小時(shí)。每月的日期可以是0-31的任何值,但您需要注意一個(gè)月內(nèi)的天數(shù)!月份可以指定為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”,則表示“每小時(shí)每20分鐘一次,從第3分鐘開始” - 或者換句話說,它與在“分鐘”中指定“3,23,43”相同。
?? ??? ?“?”字符允許用于日期和星期字段。 它用于指定“無特定值”。 當(dāng)您需要在兩個(gè)字段之一中指定某些內(nèi)容而不是另一個(gè)字段時(shí),這非常有用。 請(qǐng)參閱下面的示例(和CronTrigger API文檔)以獲得說明。
?? ??? ?“L”字符允許用于日期和星期字段。 這個(gè)字符是“l(fā)ast”的簡寫,但它在兩個(gè)字段的中具有不同的含義。 例如,日期字段中的“L”值表示“月份的最后一天” -? 1月31日,非閏年2月28日。 如果在星期字段中單獨(dú)使用,則僅表示“7”或“SAT”。如果在星期字段中在另一個(gè)值后使用了“L”,則表示“該月的最后一個(gè)xxx日” - 例如“6L”或“FRIL”均表示“該月的最后一個(gè)星期五”。 使用“L”選項(xiàng)時(shí),重要的是不要指定列表或值范圍,因?yàn)槟玫降慕Y(jié)果并不是你想要的。
?? ??? ?'W'用于指定最接近給定日期的工作日(周一至周五)。 例如,如果您指定“15W”作為日期字段的值,則含義為:“最接近的工作日到該月的15日”。
?? ??? ?‘#’這個(gè)詞是用來指定這個(gè)月的“第n個(gè)”XXX工作日。例如,星期幾字段中的“6#3”或“FRI#3”的值表示“本月的第三個(gè)星期五”。
?? ?三、示例 Cron 表達(dá)式
?? ??? ?以下是表達(dá)式及其含義的更多示例 - 您可以在CronTrigger的API文檔中找到更多
?? ??? ?CronTrigger示例1? - 用于創(chuàng)建觸發(fā)器的表達(dá)式,該觸發(fā)器每5分鐘觸發(fā)一次
?? ??? ??? ?"0 0/5 * * * ?"
?? ??? ?CronTrigger示例2? - 用于創(chuàng)建觸發(fā)器的表達(dá)式,該觸發(fā)器在每分鐘10秒后(即上午10:00:10,上午10:05:10等)每5分鐘觸發(fā)一次。
?? ??? ??? ?"10 0/5 * * * ?"
?? ??? ?CronTrigger示例3? - 用于創(chuàng)建觸發(fā)器的表達(dá)式,該觸發(fā)器在每周三和周五的10:30,11:30,12:30和13:30觸發(fā)。
?? ??? ??? ?"0 30 10-13 ? * WED,FRI"
?? ??? ?CronTrigger示例4? - 用于創(chuàng)建觸發(fā)器的表達(dá)式,該觸發(fā)器在每個(gè)月的5日和20日上午8點(diǎn)到上午10點(diǎn)之間每半小時(shí)觸發(fā)一次。 請(qǐng)注意,觸發(fā)器不會(huì)在上午10:00,即8:00,8:30,9:00和9:30觸發(fā)
?? ??? ??? ?"0 0/30 8-9 5,20 * ?"
?? ??? ?請(qǐng)注意,某些計(jì)劃要求過于復(fù)雜,無法通過單個(gè)觸發(fā)器表達(dá) - 例如“上午9:00至上午10:00之間每隔5分鐘,下午1:00至晚上10:00之間每20分鐘”。 此方案中的解決方案是創(chuàng)建兩個(gè)觸發(fā)器,并注冊(cè)它們以運(yùn)行相同的作業(yè)。
?? ??? ?
?? ?四、建立CronTriggers
?? ??? ?CronTrigger實(shí)例是使用TriggerBuilder(用于觸發(fā)器的主要屬性)和WithCronSchedule擴(kuò)展方法(用于特定于CronTrigger的屬性)構(gòu)建的。
?? ??? ?您還可以使用CronScheduleBuilder的靜態(tài)方法來創(chuàng)建計(jì)劃。
?? ??? ?建立一個(gè)觸發(fā)器,每天上午8點(diǎn)到下午5點(diǎn)之間每隔一分鐘觸發(fā)一次:
?? ??? ?構(gòu)建一個(gè)觸發(fā)器,每天上午10:42觸發(fā):
?? ??? ?構(gòu)建一個(gè)觸發(fā)器,該觸發(fā)器將在星期三上午10點(diǎn)42分在TimeZone中觸發(fā),而不是系統(tǒng)的默認(rèn)值:
?? ?五、CronTrigger Misfire 說明
?? ??? ?以下說明可用于告知Quartz當(dāng)CronTrigger發(fā)生失效時(shí)它應(yīng)該做什么。 (在本教程的“更多關(guān)于觸發(fā)器”部分中介紹了失效情況)。 這些指令以常量定義(并且API文檔具有對(duì)其行為的描述)。 說明包括:
?? ??? ??? ?
?? ??? ???? MisfireInstruction.IgnoreMisfirePolicy
?? ??? ???? MisfireInstruction.CronTrigger.DoNothing
?? ??? ???? MisfireInstruction.CronTrigger.FireOnceNow
?? ??? ?所有觸發(fā)器都可以使用MisfireInstrution.SmartPolicy指令,該指令也是所有觸發(fā)器類型的默認(rèn)指令。 CronTrigger將“smart policy”指令解釋為MisfireInstruction.CronTrigger.FireOnceNow。 CronTrigger.UpdateAfterMisfire()方法的API文檔解釋了此行為的確切詳細(xì)信息。
?? ??? ?在構(gòu)建CronTriggers時(shí),您將失效指令指定為cron調(diào)度的一部分(通過WithCronSchedule擴(kuò)展方法):
?? ?六、總結(jié)
?? ??? ? 今天要寫的內(nèi)容差不多了,由于個(gè)人的翻譯水平有限,可能存在不正確的地方,為了讓大家可以看到原文,這樣可以有個(gè)更好的理解,我也把原地址貼出來。原文地址如下:https://www.quartz-scheduler.net/documentation/quartz-3.x/tutorial/crontriggers.html
?? ??? ?不忘初心,繼續(xù)努力。
轉(zhuǎn)載于:https://www.cnblogs.com/PatrickLiu/p/10101964.html
總結(jié)
以上是生活随笔為你收集整理的Quartz.Net进阶之四:CronTrigger 详述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Git 将代码回到指定版本
- 下一篇: 分页工具类