您的位置 首页 kreess

簡潔明瞭看懂cron表達式

在使用定時調度任務的時候,我們最常用的,就是cron表達式瞭。通過cron表達式來指定任務在某個時間點或者周期性的執行。 cron表達式配置起來簡潔方便,無論是Sprin

在使用定時調度任務的時候,我們最常用的,就是cron表達式瞭。通過cron表達式來指定任務在某個時間點或者周期性的執行。

cron表達式配置起來簡潔方便,無論是Spring的@Scheduled還是用Quartz框架,都支持cron表達式。

但是理解cron表達式,還是需要花上幾分鐘的時間來學習的。

cron表達式的組成

cron表達式是一個字符串,由6到7個字段組成,用空格分隔。其中前6個字段是必須的,最後一個是可選的。每個字段的含義如圖所示:

從左到右,依次對每個字段指定相應的值,就可以確定一個任務的執行時間點和周期瞭。

值可以由數字配合字符來組合。

99%的情況下會用到的字符

在大部分使用cron的場景下, – * / ? 這幾個常用字符就可以滿足我們的需求瞭。

  • 【*】:每的意思。在不同的字段上,就代表每秒,每分,每小時等。
  • 【-】:指定值的范圍。比如[1-10],在秒字段裡就是每分鐘的第1到10秒,在分就是每小時的第1到10分鐘,以此類推。
  • 【,】:指定某幾個值。比如[2,4,5],在秒字段裡就是每分鐘的第2,第4,第5秒,以此類推。
  • 【/】:指定值的起始和增加幅度。比如[3/5],在秒字段就是每分鐘的第3秒開始,每隔5秒生效一次,也就是第3秒、8秒、13秒,以此類推。
  • 【?】:僅用於【日】和【周】字段。因為在指定某日和周幾的時候,這兩個值實際上是沖突的,所以需要用【?】標識不生效的字段。比如【0 1 * * * ?】就代表每年每月每日每小時的1分0秒觸發任務。這裡的周就沒有效果瞭。

極少能用到的字符

  • SUN:僅用於【周】字段,表示星期日。也可以用數字1設置。周日到周六分別為SUN,MON,TUE,WED,THU,FRI和SAT,對應數字1,2,3,4,5,6,7。目前Quartz支持。
  • L:即last,用於【日】【周】字段。這裡需要註意的是,在不同的字段的不同使用方式,其含義有所差別。
    • 用於日字段:直接使用L代表每個月的最後一天。也支持偏移量的方式,配置[L-1]則代表每月的倒數第二天。
    • 用於周字段:直接使用L代表每周的最後一天,也就是等效於[7]或[SAT],但是如果配合上數字,比如[7L],則代表每個月最後一個周六,等效於[SATL]。目前Quartz支持。

一些常見的例子

cron表達式 含義 常用場景 執行時間
5 * * * * ? 每分鐘的第5秒執行一次 常見的每分鐘的定時任務,檢查數據庫和緩存數據是否一致 2021-04-11 13:10:052021-04-11 13:11:052021-04-11 13:12:052021-04-11 13:13:052021-04-11 13:14:052021-04-11 13:15:05
5 * 10-22 * * ? 從早上10點到晚上十點,每分鐘的第5秒執行一次 將定時任務限制在每天的工作時間 2021-04-11 13:10:052021-04-11 13:11:052021-04-11 13:12:052021-04-11 13:13:052021-04-11 13:14:052021-04-11 13:15:05
5 0 0/6 * * ?等效於5 0 0,6,12,18 * * ? 每天從0點開始,每隔6小時執行一次。執行時間為第0分5秒。 常用於每天較低頻次的批量同步數據 2021-04-12 00:00:052021-04-12 06:00:052021-04-12 12:00:052021-04-12 18:00:05

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

返回顶部