天天看點

Quartz任務排程(2)CronTrigger定制個性化排程方案Cron表達式使用示例

cron表達式有6或7個空格分割的時間字段組成:

位置

時間域名

允許值

允許的特殊字元

1

0-59

,-*/

2

分支

,-*?/

3

小時

0-23

4

日期

1-31

,-*/lwc

5

月份

1-12或 jan-dec

6

星期

1-7 或 sun-sat

,-*?/lc#

7

年(可選)

1970-2099

在月份和星期中,我們也可以使用英文單詞的縮寫形式

在cron表達式的時間字段中,除允許設定數值外,還能你使用一些特殊的字元,提供清單、範圍、通配符等功能

可用在所有字段下,表示對應時間域名的每一個時刻,如*用在分鐘字段,表示“每分鐘”。

隻能用在日期和星期字段,代表無意義的值,比如使用l設定為當月的最後一天,則配置日期配置就沒有意義了,可用?作占位符的作用。

表示一個範圍,如在日期字段5-10,表示從五号到10号,相當于使用逗号的<code>5,6,7,8,9,10</code>

表示一個并列有效值,比如在月份字段使用jan,dec表示1月和12月

x/y表示一個等步長序列,x為起始值,y為增量步長值,如在小時使用1/3相當于1,4,7,10當時用*/y時,相當于0/y

l(last)隻能在日期和星期字段使用,但意思不同。在日期字段,表示當月最後一天,在星期字段,表示星期六(如果按星期天為一星期的第一天的概念,星期六就是最後一天。如果l在星期字段,且前面有一個整數值x,表示“這個月的最後一個星期x”,比如3l表示某個月的最後一個星期二

選擇離給定日期最近的工作日(周一至周五)。例如你指定“15w”作為day of month字段的值,就意味着“每個月與15号最近的工作日”。是以,如果15号是周六,則觸發器會在14号(周五)觸發。如果15号是周日,則觸發器會在16号(周一)觸發。如果15号是周二,則觸發器會在15号(周二)觸發。但是,如果你指定“1w”作為day of month字段的值,且1号是周六,則觸發器會在3号(周一)觸發。quartz不會“跳出”月份的界限。

在日期字段可以組合使用lw,表示當月最後一個工作日(周一至周五)

隻能在星期字段中使用指定每月第幾個星期x。例如day of week字段的“6#3”,就意味着“每月第3個星期五”(day3=星期五,#3=第三個);“2#1”就意味着“每月第1個星期一”;“4#5”就意味着“每月第5個星期3。需要注意的是“#5”,如果在當月沒有第5個星期三,則觸發器不會觸發。

隻能在日期和星期字段中使用,表示計劃所關聯的诶其,如果日期沒有被關聯,相當于月曆中的所有日期,如5c在日期字段相當于5号之後的第一天,1c在日期字段使用相當于星期填後的第一天

cron表達式對特殊字元的大小寫不敏感,對代表星期的縮寫英文大小寫也不敏感。如mon和mon是一樣的

cron表達式

含義

0 0 12 * * ?

每天12點整觸發一次

0 15 10 ? * *

每天10點15分觸發一次

0 15 10 * * ?

0 15 10 * * ? *

0 15 10 * * ? 2005

2005年内每天10點15分觸發一次

0 * 14 * * ?

每天的2點整至2點59分,每分鐘觸發一次

0 0/5 14 * * ?

每天的2點整至2點55分,每5分鐘觸發一次

0 0/5 14,18 * * ?

每天的2點整至2點55分以及18點整至18點55分,每5分鐘觸發一次

0 0-5 14 * * ?

每天的2點整至2點5分,每分鐘觸發一次

0 10,44 14 ? 3 wed

每年3月的每個星期三的2點10分以及2點44分觸發一次

0 15 10 ? * mon-fri

每月周一、周二、周三、周四、周五的10點15分觸發一次

0 15 10 15 * ?

每月15的10點15分觸發一次

0 15 10 l * ?

每月最後一天的10點15分觸發一次

0 15 10 ? * 6l

每月最後一個周五的10點15分觸發一次

0 15 10 ? * 6l 2002-2005

2002年至2005年間,每月最後一個周五的10點15分觸發一次

0 15 10 ? * 6#3

每月第三個周五的10點15觸發一次

0 0 12 1/5 * ?

每月1号開始,每5天的12點整觸發一次

0 11 11 11 11 ?

每年11月11日11點11分觸發一次

在quartz1.+版本中,我們通過如下方法建立crontrigger

而在2.+版本中,則通過如下方式建立

繼續閱讀