搜尋
首頁Javajava教程基於Spring的最簡單的定時任務實作與配置之cron表達式的相關內容

     原本這篇文章是會跟著這篇系列的前兩篇文章一起發布的。但是,昨天在找資料總結的時候遇到了一點意外,就延後了一些。

     本篇的內容主要參考了 這篇文章:(百度搜尋cron 表達式排名第一的連結)。爭取寫得更別人的有點不一樣吧。雖然,內容大都類似。

先從例子開始:

 

     「0 0 10,14,16 * * ?  」的意思是   什麼呢?

      首先,因為 Cron表達式是一個字串,字串以5或6個空格隔開,分為6或7個域,每一個域代表一個意義,Cron有如下兩種語法格式: 

          Seconds Minutes Hours DayofMonth Month DayofWeek Year或 
          Seconds Minutes Hours DayWeekofth Month Day         Seconds Minutes Hours DayWeekofth 前兩個位置都是0 在第三個位置是小時的值是10,14,16在這裡“,”意味著羅列,枚舉,意思是每遇到10,14,16小時就會執行,而後面的都是* 意味著 表示符合該域的任意值,假如在Minutes域使用*, 即表示每分鐘都會觸發事件。 那麼 " 0 0 10,14,16 * * ? "中最後一個「?」指的是  ?:只能用在DayofMonth和DayofWeek兩個域。它也匹配域的任意值,但實際上不會。因為DayofMonth和 DayofWeek會互相影響。例如想在每月的20日觸發調度,不管20日到底是星期幾,則只能使用如下寫法: 13 13 15 20 * ?, 其中最後一位只能用? ,而不能使用*,如果使用*表示不管星期幾都會觸發,實際上並不是這樣。 

所以「 0 0 10,14,16 * * ? 」表達的意思是 在每天的10點,14點,16點會觸發。

然後,下一題:

         「0 0/30 9-17 * * ?」 

在這個表達式中,相較於前一個多了兩個符號,一個是“/”,另外一個是“-”。他們的意思分別是:

       「-」:表示範圍,例如在Minutes領域使用5-20,表示從5分到20分鐘每分鐘觸發一次 

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

#所以在這裡「0/30 」   意思是從0分鐘開始每隔30分鐘執行一次。而「9-17「標識範圍,即從9點到17點都會執行。合起來,「0 0/30 9-17 * * ?」 這個表達式的意思就是 每天的9點到17點,每隔30分鐘執行一次。

繼續,下一題:

         

在這裡的表達式多出了一個"WED",是星期三的縮寫

所以這裡   「 0 0 12 ? * WED”  表示每個星期三中午12點,一下是測試結果。 (為了測試方便,把時間改為10秒一次)

本文中餘下cron 表達式可以在之前兩篇文章中的定時任務中測試和印證相關內容。餘下的表達式便不再一一解析了。以下是,引用原文,希望能解答一部分問題:

 

 

 一、Cron表達式內容解析  

Cron表達式是一個字串,字串以5或6個空格隔開,分為6或7個域,每一個域代表一個含義,Cron有以下兩種語法格式: 

Seconds Minutes Hours DayofMonth Month DayofWeek Year或 

Seconds Minutes Hours DayofMonth Month DayofWeek


每一個域可出現的字符如下: 
Seconds:可出現", - * /"四個字符,有效範圍為0 -59的整數 

Minutes:可出現", - * /"四個字符,有效範圍為0-59的整數 

Hours:可出現", - * /"四個字符,有效範圍為0 -23的整數 
DayofMonth:可出現", - * / ? L W C"八個字符,有效範圍為0-31的整數 
Month:可出現", - * /"四個字符,有效範圍為1-12的整數或JAN-DEc 
DayofWeek:可出現", - * / ? L C #"四個字符,有效範圍為1-7的整數或SUN-SAT兩個範圍。 1表示星期天,2表示星期一, 依次類推 
Year:可出現", - * /"四個字符,有效範圍為1970-2099年

每一個域都使用數字,但還可以出現如下特殊字符,它們的含義是: 
(1)*:表示匹配該域的任意值,假如在Minutes域使用*, 即表示每分鐘都會觸發事件。

(2)?:只能用在DayofMonth和DayofWeek兩個域。它也匹配域的任意值,但實際上不會。因為DayofMonth和 DayofWeek會互相影響。例如想在每月的20日觸發調度,不管20日到底是星期幾,則只能使用如下寫法: 13 13 15 20 * ?, 其中最後一位只能用? ,而不能使用*,如果使用*表示不管星期幾都會觸發,實際上並不是這樣。

(3)-:表示範圍,例如在Minutes域使用5-20,表示從5分到20分鐘每分鐘觸發一次 

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

#(5),:表示列出枚舉值值。例如:在Minutes域使用5,20,則表示在5和20分每分鐘觸發一次。 

(6)L:表示最後,只能出現在DayofWeek和DayofMonth域,如果在DayofWeek域使用5L,意味著在最後的一個星期四觸發。 

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

(8)LW:這兩個字元可以連用,表示在某個月最後一個工作日,即最後一個星期五。 

(9)#:用來決定每個月第幾個星期幾,只能出現在DayofMonth領域。例如在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執行作


#一個cron表達式有至少6個(也可能7個)有空格分隔的時間元素。
依序為 
秒(0~59) 
分鐘(0~59) 
小時(0~23) 
天(月)(0~31,但你需要考慮你月的天數) 
月(0~11) 
天(星期)(1~7 1=SUN 或SUN,MON,TUE,WED,THU,FRI,SAT) 
年份(1970- 2099)

其中每個元素可以是一個值(如6),一個連續區間(9-12),一個間隔時間(8-18/4)(/表示每隔4小時),一個列表(1,3,5),通配符。由於"月份中的日期"和"星期中的日期"這兩個元素互斥的,必須要對其中一個設置?

 


有些子表達式能包含一些範圍或清單

例如:子表達式(天(天數))可以為“MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”

「*」字元代表所有可能的值

因此,「*」在子表達式(月)裡表示每個月的含義,「*」在子表達式(天(星期))表示星期的每一天


「/」字元用來指定數值的增量 
例如:在子表達式(分鐘)裡的「0/15」表示從第0分鐘開始,每15分鐘 
在子表達式(分鐘)裡的「3/20」表示從第3分鐘開始,每20分鐘(它和「3,23,43」)的意思一樣


#「?」字元只用於天(月)和天(星期)兩個子表達式,表示不指定值 
#當2個子表達式其中之一被指定了值以後,為了避免衝突,需要將另一個子表達式的值設為「?」

「L」 字元只用於天(月)和天(星期)兩個子表達式,它是單字「last」的縮寫 
但是它在兩個子表達式裡的意思是不同的。
在天(月)子表達式中,「L」表示一個月的最後一天 
在天(星期)自表達式中,「L」表示一個星期的最後一天,也就是SAT

如果在「L」前有具體的內容,它就具有其他的意義了

例如:「6L」表示這個月的倒數第6天,「FRIL」表示這個月的最一個星期五 
注意:在使用「L」參數時,不要指定清單或範圍,因為這會導致問題

欄位允許值允許的特殊字元 
秒0-59 , - * /
分0-59 , - * / 
小時0-23 , - * / 
日期1-31 , - * ? / L W C 
月份1-12 或JAN-DEC , - * /
星期1-7 或SUN-SAT , - * ? / L C # 
年(可選) 留白, 1970-2099 , - * /

 

   二、 Cron表達式範例:

"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觸發

 

#

以上是基於Spring的最簡單的定時任務實作與配置之cron表達式的相關內容的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具