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

基於Spring的最簡單的定時任務實作與配置之cron表達式的相關內容

Jun 22, 2017 am 11:32 AM
spring 任務 基於 定時

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

     本篇的內容主要參考了 這篇文章:(百度搜尋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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1248
24
模擬山羊3恐怖走廊任務怎麼做 模擬山羊3恐怖走廊任務怎麼做 Feb 25, 2024 pm 03:40 PM

恐怖走廊是模擬山羊3之中的一個任務,這個任務要怎麼樣才能夠去完成呢,掌握到詳細的過關方式和對應的流程,能夠完成這個任務的相應挑戰,下面就為大家帶來模擬山羊3恐怖走廊攻略,了解相關的資訊。模擬山羊3恐怖走廊攻略1、首先需要玩家前往地圖左上角的寂靜嶺處。 2.在這裡可以看到一個屋頂上寫著RESTSTOP的房子,玩家需要操作山羊進入這棟房子。 3.進入房間​​之後,我們先向前直走,然後向右轉,在這裡盡頭有一扇門,我們直接從這裡進去。 4.進入之後同樣是先向前走隨後右轉,在這裡走到門前門會關上,我們需要回頭找到

模擬山羊3帝陵任務怎麼過 模擬山羊3帝陵任務怎麼過 Mar 11, 2024 pm 01:10 PM

模擬山羊3是有著經典模擬玩法的遊戲,可讓玩家充分體驗到休閒動作類操作模擬的樂趣,遊戲中還擁有很多特色任務的精彩,其中模擬山羊3帝陵任務是需要玩家找尋到鐘塔上的三個鐘並操作的,有些玩家還不清楚要怎麼弄,下面帶來模擬山羊3帝陵任務攻略流程分享!模擬山羊3帝陵任務攻略流程按照順序敲擊鐘即可。詳細步驟拓展1、首先玩家需要打開地圖到霧丘公墓。 2.然後上到鐘樓上,裡面會有三個鐘。 3.接著按照從大到小的順序,依照222312312熟悉怒敲擊。 4、完成敲擊後即可完成任務,並打開大門以獲得光劍。

模擬山羊3營救史蒂夫任務怎麼做 模擬山羊3營救史蒂夫任務怎麼做 Feb 25, 2024 pm 03:34 PM

營救史蒂夫是模擬山羊3中的一個獨特任務,具體需要怎麼做才能夠完成呢,這個任務比較簡單,但是我們需要注意不要理解錯意思,下面就為大家帶來模擬山羊3營救史蒂夫任務攻略,能夠更好的完成相關的任務。模擬山羊3營救史蒂夫任務攻略1、先來到地圖中右下角的溫泉。 2.在來到溫泉邊之後就可以觸發營救史蒂夫的這個任務。 3.注意在溫泉裡有個男人,雖然他也叫史蒂夫,但是並不是這次任務的目標。 4.在這個溫泉裡找到一條叫史蒂夫的魚,並且將其帶上岸,即可完成這個任務。

編程新範式,當Spring Boot遇上OpenAI 編程新範式,當Spring Boot遇上OpenAI Feb 01, 2024 pm 09:18 PM

2023年,AI技術已成為熱門話題,對各行業產生了巨大影響,程式設計領域尤其如此。人們越來越認識到AI技術的重要性,Spring社群也不例外。隨著GenAI(GeneralArtificialIntelligence)技術的不斷進步,簡化具備AI功能的應用程式的創建變得至關重要和迫切。在這個背景下,"SpringAI"應運而生,旨在簡化開發AI功能應用程式的過程,使其變得簡單直觀,避免不必要的複雜性。透過"SpringAI",開發者可以更輕鬆地建立具備AI功能的應用程序,將其變得更加易於使用和操作

利用Spring Boot以及Spring AI建構生成式人工智慧應用 利用Spring Boot以及Spring AI建構生成式人工智慧應用 Apr 28, 2024 am 11:46 AM

Spring+AI作為行業領導者,透過其強大、靈活的API和先進的功能,為各種行業提供了領先性的解決方案。在本專題中,我們將深入探討Spring+AI在各領域的應用範例,每個案例都將展示Spring+AI如何滿足特定需求,實現目標,並將這些LESSONSLEARNED擴展到更廣泛的應用。希望這個專題能對你有所啟發,更深入地理解和利用Spring+AI的無限可能。 Spring框架在軟體開發領域已經有超過20年的歷史,自SpringBoot1.0版本發布以來已有10年。現在,無人會質疑,Spring

抖音粉絲團任務在哪裡看?抖音粉絲團會掉等級嗎? 抖音粉絲團任務在哪裡看?抖音粉絲團會掉等級嗎? Mar 07, 2024 pm 05:25 PM

抖音作為當下最受歡迎的社群媒體平台之一,吸引了大量用戶參與其中。在抖音上,有許多粉絲團任務可供用戶完成,以獲得一定的獎勵和福利。那麼,抖音粉絲團任務在哪裡可以找到呢?一、抖音粉絲團任務在哪裡看?為了找到抖音粉絲團任務,你需要造訪抖音的個人首頁。在主頁上,你會看到一個名為「粉絲團」的選項。點擊這個選項,你就可以瀏覽你所加入的粉絲團和相關任務。在粉絲團任務欄位中,你會看到各種不同類型的任務,例如按讚、留言、分享、轉發等。每個任務都有對應的獎勵和要求,一般來說,完成任務後會獲得一定數量的金幣或經驗值

spring編程式事務有哪些實作方式 spring編程式事務有哪些實作方式 Jan 08, 2024 am 10:23 AM

spring編程式事務的實作方式:1、使用TransactionTemplate;2、使用TransactionCallback和TransactionCallbackWithoutResult;3、使用Transactional註解;4、使用TransactionTemplate和@Transactional結合使用;5、自訂事務管理器。

Spring如何設定事務隔離級別 Spring如何設定事務隔離級別 Jan 26, 2024 pm 05:38 PM

Spring設定事務隔離等級的方法:1、使用@Transactional註解;2、在Spring設定檔中設定;3、使用PlatformTransactionManager;4、在Java配置類別中設定。詳細介紹:1、使用@Transactional註解,在需要進行事務管理的類別或方法上加入@Transactional註解,並在屬性中設定隔離等級;2、在Spring設定檔等等。

See all articles