Quartz表示式學習

2021-09-01 15:07:38 字數 3270 閱讀 6523

cron-expressions用於配置crontrigger例項,cron-expressions是一串字串,實際上它由六個子字串組成,子字串間採用空格分離,從左到右分別代表:seconds minutes hours day-of-month month day-of-week。

字串「0 0 12 ? * wed」是乙個完整的cron-expressions例子,它所表達的意思是:每週三早上12:00。

各個子表示式的值可以是乙個範圍或者列表,比如,上個例子中的day-of-week域的值「wed」可以用「mon-fri」、「mon,wed,fri」或者「mon-wed,sat」來替代。

所有子表示式都有指定各自的取值範圍,下面對cron-expressions的各個子表示式和取值範圍進行說明:

子表示式

允許的值

允許的特殊字元

seconds

0-59

- * /

minutes

0-59

- * /

hours

0-23

- * /

day-of-month

1-31

- * ? / l w

month

1-12或jan-dec

- * /

day-of-week

1-7或sun-sat

- * ? / l #

years(optional)

為空或1970-2099

- * /

『-』字元表示:值的範圍,10-12在hours域中表示為:10、11和12;

『*』字元表示:可以為任意值,『*』在minutes域中表示為:每分鐘;

『/』字元表示:乙個左邊的數值是右邊基數的遞增值,『0/15』在seconds域中表示為:第0、15、30和45秒,『5/15』 在seconds域中表示為:第5、20、35和50;

『?』字元表示:沒有對該域指定值,可以為任意值,不對該域進行限制,『?』只能用在day-of-month和day-of-week域中;

『l』字元表示:『l』是取『last』的第乙個字母,也只能用在day-of-month和day-of-week域中,在day-of-month域 中的意思是:月份的最後一天,在day-of-week域中的意思是:『7』或『sat』,但是在day-of-week域中用在另乙個值後的意思是:該 月的最後乙個星期幾,如:『6l』為:該月的最後乙個星期五;

『w』字元表示:『w』是取『weekday』的第乙個字母,只能用在day-of-month域中,『w』代表了最接近給定那一天的工作日,如:在 day-of-month域中把值設為:15w,表示的意思是:該月的第15日最接近的工作日,所以當第15日是週六時,trigger將在第14日的周 五執行觸發,當第15日是周天時,trigger將在第16日的周一執行觸發,當第15日是工作日時,trigger將在第15日的當天執行觸發;然而在 day-of-month域中把值設為:1w,當第1日是週六時,trigger將在第3日的周一執行觸發,因為它不會跨越月份的範圍,『w』字元只能是 該月中的一天,而不是乙個範圍或天數的列表;在day-of-month 域中可以結合使用『l』和『w』字元『lw』,『lw』表示:月份的最後乙個工作日;

『#』字元表示:月份的第幾個星期幾,只能用在day-of-week域中,如:在day-of-week域中把值設為:6#3,表示的意思是:該月的第3個星期5(day 6=friday and 「#3」=the 3rd one in the month);2#1表示的意思是:該月的第1個星期1;4#5表示的意思是:該月的第5個星期3;需要注意:不能把值設為「#5」,因為乙個月中不可能有第5個星期3,如果這樣設定,將導致該月無法執行觸發;

下面舉一些完整的cron- expressions例子:

表示式

意思

0 0 12 * * ?

每天12:00執行觸發

0 15 10 ? * *

每天10:15執行觸發

0 15 10 * * ?

每天10:15執行觸發

0 15 10 * * ? *

每天10:15執行觸發

0 15 10 * * ? 2005

2023年的每天10:15執行觸發

0 * 14 * * ?

每天從14:00到14:59每隔1分鐘執行一次觸發

0 0/5 14 * * ?

每天從14:00到14:59每個5分鐘執行一次觸發

0 0/5 14,18 * * ?

每天從14:00到14:59和18:00到18:59每隔5分鐘執行一次觸發

0 0-5 14 * * ?

每天從14:00到14:05每隔1分鐘執行一次觸發

0 10,44 14 ? 3 wed

3月的每個星期3的14:10和14:44分別執行一次觸發

0 15 10 15 * ?

每月的第15日10:15執行一次觸發

0 15 10 l * ?

每月最後一天的10:15執行一次觸發

0 15 10 ? * 6l

每月的最後乙個星期5的10:15執行一次觸發

0 15 10 ? * 2002-2005

2002、2003、2004、2023年的每個月的最後乙個星期5的10:15執行一次觸發

0 15 10 ? * 6#3

每月的第3個星期5的10:15執行一次觸發

當schedule中要求比較複雜,採用單個的trigger無法實現時,可以配置多個的trigger來實現,比如:每天的9:00到10:00之間每 隔5分鐘執行一次觸發,並且在每天的13:00到22:00之間每隔20分鐘執行一次觸發,配置2個trigger並把2配置好的2個trigger註冊 到相同的job中就可以很簡單的實現上述情況。

Quartz表示式說明

quartz 表示式是乙個字串,它有六個子表示式構成。這些子表示式用空格來分隔。子表示式描述如下 秒 0 59 分鐘 0 59 小時 0 23 天 月 0 31,但是你需要考慮你月的天數 月 0 11 天 星期 1 7 1 sun 或 sun,mon,tue,wed,thu,fri,sat 乙個完整...

Quartz表示式說明

表示式是乙個字串,它有六個子表示式構成。這些子表示式用空格來分隔。子表示式描述如下 秒 0 59 分鐘 0 59 小時 0 23 天 月 0 31,但是你需要考慮你月的天數 月 0 11 天 星期 1 7 1 sun 或 sun,mon,tue,wed,thu,fri,sat 乙個完整的例子 0 0...

quartz表示式 積累

乙個 cron 表示式有至少 6個 也可能 7個 由空格分隔的時間元素。按順序依次為 1.秒 0 59 2.分鐘 0 59 3.小時 0 23 4.天 月 0 31 但是你需要考慮你的月的天數 5.月 0 11 6.天 星期 1 7 1 sun 或sun mon tue wed thu fri sa...