spring的corn表達式

從新學習一下spring的相關知識,記錄下筆記,方便往後回顧。html

首先corn是spring的定時器表達式,這就不用多說啦。咱們來看下它的結構:spring

1. 結構 

corn表達式 從左到右 依次是 秒  分 時  日期 月份 星期 年份學習

例如  0 0 1 * * * ?就是一個表達式,一個cron表達式有至少6個(也可能7個)有空格分隔的時間元素。每一個位置上都必須配置上相應的值。spa

2. 值得含義

字段 容許值 容許的特殊字符
0~59 - * /
0~59 - * /
小時 0~23 - * /
日期 1~31 - * ? / L W C 
月份 1~12或者或者 JAN-DEC - * /
星期 1~7或者 SUN-SAT  - * ? / L C # 
年(可選,留空) 1970~2099 - * /

 

 

 

 

 

 

 

 

 

 

此表可清楚的展示每一個位置上容許配置的數值以及符號。位置上的值能夠由數值來配置,也能夠由符號替代。htm

就好比0 0 1 * * * ? 這個表達式  第一位即秒的位置配置了數字0 ,第二位分鐘的位置上配置了0, 第三位小時配置了數字1,而到第五位,所對應的是日期,則配置了 * ,後面依次。blog

這表達式表明 天天1點0分0秒事件

3. 符號表明的意義:

* :表示匹配該域的任意值,假如在Minutes域使用*, 即表示每分鐘都會觸發事件。table

? :只能用在日期星期兩個域。它也匹配域的任意值,但實際不會。由於日期和 星期會相互影響。例如想在每個月的20日觸發調度,無論20日究竟是星期幾,則只能使用以下寫法: 13 13 15 20 * ?, 其中最後一位只能用?,而不能使用*,若是使用*表示無論星期幾都會觸發,實際上並非這樣。配置

- :表示範圍,例如在分鐘域使用5-20,表示從5分到20分鐘每分鐘觸發一次定時器

/ :表示起始時間開始觸發,而後每隔固定時間觸發一次,例如在分鐘域使用5/20,則意味着5分鐘觸發一次,而25,45等分別觸發一次.

, :表示列出枚舉值值。例如:在分鐘域使用5,20,則意味着在5和20分每分鐘觸發一次。

L:表示最後,只能出如今日期和星期域,若是在星期 域使用5L,意味着在最後的一個星期四觸發。

W:表示有效工做日(週一到週五),只能出如今日期域,系統將在離指定日期的最近的有效工做日觸發事件。例如:在 日期使用5W,若是5日是星期六,則將在最近的工做日:星期五,即4日觸發。若是5日是星期天,則在6日(週一)觸發;若是5日在星期一 到星期五中的一天,則就在5日觸發。另一點,W的最近尋找不會跨過月份

LW:這兩個字符能夠連用,表示在某個月最後一個工做日,即最後一個星期五。

#:用於肯定每月第幾個星期幾,只能出如今日期域。例如在4#2,表示某月的第二個星期三。

下面舉幾個例子來幫助理解

0 0 2 1 * ? * 表示在每個月的1日的凌晨2點調度任務
0 15 10 ? * MON-FRI 表示週一到週五天天上午10:15執行做業
0 15 10 ? 6L 2002-2006 表示2002-2006年的每月的最後一個星期五上午10:15執行做

如下是前人整理出的經常使用的表達式,參考借鑑下

"0 0 12 * * ?" 天天中午12點觸發
"0 15 10 ? * *" 天天上午10:15觸發
"0 15 10 * * ?" 天天上午10:15觸發
"0 15 10 * * ? *" 天天上午10:15觸發
"0 15 10 * * ? 2005" 2005年的天天上午10:15觸發
"0 * 14 * * ?" 在天天下午2點到下午2:59期間的每1分鐘觸發
"0 0/5 14 * * ?" 在天天下午2點到下午2:55期間的每5分鐘觸發
"0 0/5 14,18 * * ?" 在天天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發
"0 0-5 14 * * ?" 在天天下午2點到下午2:05期間的每1分鐘觸發
"0 10,44 14 ? 3 WED" 每一年三月的星期三的下午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觸發

每隔5秒執行一次:*/5 * * * * ?

每隔1分鐘執行一次:0 */1 * * * ?

 天天23點執行一次:0 0 23 * * ?

 天天凌晨1點執行一次:0 0 1 * * ?

 每個月1號凌晨1點執行一次:0 0 1 1 * ?

 每個月最後一天23點執行一次:0 0 23 L * ?

 每週星期天凌晨1點實行一次:0 0 1 ? * L

 在26分、29分、33分執行一次:0 26,29,33 * * * ?

 天天的0點、13點、18點、21點都執行一次:0 0 0,13,18,21 * * ?

原文出處:https://www.cnblogs.com/LoadingToMe/p/10692960.html

相關文章
相關標籤/搜索