cron表達式的講解及其在若依定時任務中的使用

目錄

  • 前言
  • 介紹
    • 一 cron的結構
    • 二 各域的含義
    • 三 常用cron表達式
  • 實例
    • 1 后臺添加定時任務處理類
    • 2 前端新建定時任務信息
    • 3 點擊執行一次
    • 4 啟動定時任務

前言

在實際項目開發中Web應用有一類不可缺少的,那就是定時任務。 定時任務的場景可以說非常廣泛,比如某些視頻網站,購買會員后,每天會給會員送成長值,每月會給會員送一些電影券; 比如在保證最終一致性的場景中,往往利用定時任務調度進行一些比對工作;比如一些定時需要生成的報表、郵件;比如一些需要定時清理數據的任務等。定時任務在我們軟件開發中應用得實在太廣泛了,下面就讓我們來一起學習學習。

介紹

一 cron的結構

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

  • 七個域
Seconds Minutes Hours DayOfMonth Month DayOfWeek Year

即corn從左到右(用空格隔開):秒 分 小時 月份中的日期 月份 星期中的日期 年份

  • 六個域
Seconds Minutes Hours DayOfMonth Month DayOfWeek

即corn從左到右(用空格隔開):秒 分 小時 月份中的日期 月份 星期中的日期

二 各域的含義

允許值允許的特殊字符
秒(Seconds)0~59的整數, - * / 四個字符
分(Minutes)0~59的整數, - * / 四個字符
0~59的整數0~23的整數, - * / 四個字符
日期(DayOfMonth)1~31的整數(但是你需要考慮你月的天數),- * ? / L W C 八個字符
月份(Month)1~12的整數或者 JAN-DEC, - * / 四個字符
星期(DayOfWeek)1~7的整數或者 SUN-SAT (1=SUN), - * ? / L C # 八個字符
年(可選,留空)(Year)1970~2099, - * / 四個字符

每一個域都能使用數字,但還可以出現如下特殊字符,允許的特殊字符含義如下:

特殊字符含義
*表示匹配該域的任意值。假如在Minutes域使用*, 即表示每分鐘都會觸發事件
?只能用在DayOfMonth和DayOfWeek兩個域。也匹配域的任意值,但實際不會。因為DayOfMonth和DayOfWeek會相互影響。例如想在每月的20日下午15點觸發定時任務,不管20日到底是星期幾,則只能使用如下寫法: 0 0 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期幾都會觸發,實際上并不是這樣。
-表示范圍。例如在Minutes域使用5-20,表示從5分到20分鐘每分鐘觸發一次
/表示起始時間開始觸發,然后每隔固定時間觸發一次。例如在Minutes域使用5/20,則意味著從第5分鐘開始觸發一次后每隔20分鐘觸發即25,45等分別觸發一次.
,表示列出枚舉值。例如:在Minutes域使用5,20,則意味著在5和20分每個時間點觸發一次。
L英文單詞Last的首字母表示最后,只能出現在DayOfWeek和DayOfMonth域。如果在DayOfWeek域使用5L,意味著在最后的一個星期四觸發。如果在DayOfMonth域使用5L 表達倒數第5天觸發。
W英文Workday的首字母,表示有效工作日(周一到周五),只能出現在DayOfMonth域,系統將在離指定日期的最近的有效工作日觸發事件。例如:在 DayOfMonth使用5W,如果5日是星期六,則將在最近的工作日:星期五,即4日觸發。如果5日是星期天,則在6日(周一)觸發;如果5日在星期一到星期五中的一天,則就在5日觸發。另外一點,W的最近尋找不會跨過月份
LW這兩個字符可以連用,表示在某個月最后一個工作日。
#用于確定每個月第幾個星期幾,只能出現在DayOfWeek域。例如在4#2,表示某月的第二個星期三。
C該字符只在DayOfMonth域和DayOfWeek域中使用,英文Calendar的首字母。指和calendar關聯后計算出來的值, 如果日期沒有被關聯,則相當于日歷中所有日期。例如 5C 在日期字段中就相當于日歷 5 日以后的第一天。 1C 在星期字段中相當于星期日后的第一天。該特殊字符很少用到,不理解也沒有關系。

注意

cron 表達式對特殊字符的大小寫不敏感,對代表星期的縮寫英文大小寫也不敏感。

三 常用cron表達式

表達式說明
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 10,14,16 * * ?每天上午10點,下午2點,4點執行
0 0/30 9-17 * * ?朝九晚五工作時間內每半小時
0 0 12 ? * WED表示每個星期三中午12點
0 0 12 * * ?每天中午12點觸發
0 15 10 ? * *每天上午10:15觸發
0 15 10 * * ?每天上午10:15觸發
0 15 10 * * ? *每天上午10:15觸發
0 15 10 * * ? 20052005年的每天上午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-20052002年至2005年的每月的最后一個星期五上午10:15觸發
0 15 10 ? * 6#3每月的第三個星期五上午10:15觸發

注意:

(1)有些子表達式能包含一些范圍或列表
例如:子表達式(天(星期))可以為 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”,“”字符代表所有可能的值。
因此,“
”在子表達式(月)里表示每個月的含義,“*”在子表達式(天(星期))表示星期的每一天。

(2)“/”字符用來指定數值的增量
例如:在子表達式(分鐘)里的“0/15”表示從第0分鐘開始,每15分鐘。
在子表達式(分鐘)里的“3/20”表示從第3分鐘開始,每20分鐘(它和“3,23,43”)的含義一樣。

(3)“?”字符僅被用于天(月)和天(星期)兩個子表達式,表示不指定值
當2個子表達式其中之一被指定了值以后,為了避免沖突,需要將另一個子表達式的值設為“?”。

(4)“L” 字符僅被用于天(月)和天(星期)兩個子表達式,它是單詞“last”的縮寫,但是它在兩個子表達式里的含義是不同的。
在天(月)子表達式中,“L”表示一個月的最后一天。
在天(星期)自表達式中,“L”表示一個星期的最后一天,也就是SAT。
如果在“L”前有具體的內容,它就具有其他的含義了。
例如:“6L”表示這個月的倒數第6天,“FRIL”表示這個月的最一個星期五。
注意:在使用“L”參數時,不要指定列表或范圍,因為這會導致問題。

實例

若依后臺動態管理定時任務

1 后臺添加定時任務處理類

支持Bean調用、Class類調用

MyTask.java

/*** @Description* @Author liql* @DateTime 2024-06-04 10:54* @Version 1.0*/
@Component("myTask")
public class MyTask {public void ryMultipleParams(String s, Boolean b){if(b){System.out.println(StringUtils.format("執行多參方法: 字符串類型{},布爾類型{}", s, b));}else {System.out.println("不會打印參數");}}public void ryParams(String params){System.out.println("執行有參方法,參數:" + params);}public void ryNoParams(){System.out.println("執行無參方法-------------------------------------");}
}

2 前端新建定時任務信息

系統監控 -> 定時任務->新增
在這里插入圖片描述
點擊新增的彈窗臺下
在這里插入圖片描述

  1. 任務名稱:自定義,如:定時查詢任務狀態
  2. 任務分組:根據字典sys_job_group配置
  3. 調用目標字符串:設置后臺任務方法名稱參數

Bean調用示例:
需要添加對應Bean注解@Component或@Service。調用目標字符串: ryTask.ryParams(‘ry’)

Class類調用示例:
添加類和方法指定包即可。調用目標字符串:com.ruoyi.quartz.task.RyTask.ryParams(‘ry’)

方法參數詳解:

字符串(需要單引號’'標識 如:ryTask.ryParams(’ry’))
布爾類型(需要true false標識 如:ryTask.ryParams(true))
長整型(需要L標識 如:ryTask.ryParams(2000L))
浮點型(需要D標識 如:ryTask.ryParams(316.50D))
整型(純數字即可)

  1. 執行表達式:可查詢官方cron表達式介紹
    輸入:2/5 * * ? * *
    表示:從第二秒鐘開始觸發,每隔5秒觸發一次。

  2. 執行策略:定時任務自定義執行策略

立即執行(所有misfire的任務會馬上執行)打個比方,如果9點misfire了,在10:15系統恢復之后,9點,10點的misfire會馬上執行

執行一次(會合并部分的misfire,正常執行下一個周期的任務)假設9,10的任務都misfire了,系統在10:15分起來了。只會執行一次misfire,下次正點執行。

放棄執行(所有的misfire不管,執行下一個周期的任務)

  1. 并發執行:是否需要多個任務間同時執行
  2. 備注:定時任務描述信息

在這里插入圖片描述

3 點擊執行一次

測試定時任務是否正常及調度日志是否正確記錄,如正常執行表示任務配置成功。

在這里插入圖片描述
在這里插入圖片描述

4 啟動定時任務

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/22401.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/22401.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/22401.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JS跨頁面或跨JS文件對變量賦值

JS跨頁面或跨JS文件對變量賦值,這是很小的一個問題。 但問題雖小,卻總覺得有點不夠自然,不爽。 為什么呢?訪問一個頁面上的變量不是什么難事,比如用parent.變量名,或者windows名.變量名,都可以…

Day42 代碼隨想錄打卡|二叉樹篇---二叉樹的所有路徑

題目(leecode T257): 給你一個二叉樹的根節點 root ,按 任意順序 ,返回所有從根節點到葉子節點的路徑。 葉子節點 是指沒有子節點的節點。 方法:本題需要對二叉樹中的所有路徑進行遍歷,并且是…

vue-router 源碼分析——2. router-link 組件是如何實現導航的

這是對vue-router 3 版本的源碼分析。 本次分析會按以下方法進行: 按官網的使用文檔順序,圍繞著某一功能點進行分析。這樣不僅能學習優秀的項目源碼,更能加深對項目的某個功能是如何實現的理解。這個對自己的技能提升,甚至面試時…

CSS選擇器和樣式

CSS CSS:選擇器:通配符選擇器:基本選擇器:標簽選擇器:類選擇器:ID選擇器:基本選擇器的優先級別: 群組選擇器:派生選擇器:后代選擇器:子代選擇器:相鄰兄弟選擇…

sed批量修改shell腳本內容

需求:郵件服務器腳本ip做了切換,由原先的11.22.33.44,切換為11.22.33.55 需要把所有使用了11.22.33.44該ip的腳本改為11.22.33.55 示例: #建2個測試文件 cat test1.txt 11.22.33.44 hello 11.22.33.44cat test2.txt 11.22.33.44 world#1.先找出哪些腳本包含該ip grep 11.22.3…

正邦科技(day3)

出廠測試 設備校準 這個需要注意的是校準電流、電壓、電感的時候有時候負感器會裝反,mcu會壞,需要flash一下清空內存

【貓狗識別系統】圖像識別Python+TensorFlow+卷積神經網絡算法+人工智能深度學習

貓狗識別系統。通過TensorFlow搭建MobileNetV2輕量級卷積神經算法網絡模型,通過對貓狗的圖片數據集進行訓練,得到一個進度較高的H5格式的模型文件。然后使用Django框架搭建了一個Web網頁端可視化操作界面。實現用戶上傳一張圖片識別其名稱。 一、前言 …

iptables備份

備份 iptables sudo iptables-save > iptables_backup.txt文件還原

【安裝筆記-20240529-Windows-poedit 翻譯編輯器】

安裝筆記-系列文章目錄 安裝筆記-20240529-Windows-Poedit 翻譯編輯器 文章目錄 安裝筆記-系列文章目錄安裝筆記-20240529-Windows-Poedit 翻譯編輯器 前言一、軟件介紹名稱:Poedit主頁官方介紹 二、安裝步驟測試版本:Poedit-3.4.4下載鏈接安裝界面 三、…

華為機械工程師面試問題

在機械工程師的面試中,面試官可能會提出一系列問題,以評估應聘者的專業知識、技能、經驗以及解決問題的能力。以下是一些可能的面試題: 基礎知識與技能: 請解釋機械工程中常用的幾種傳動方式,并比較它們的優缺點。描述一下你在機械設計過程中常用的軟件,并舉例說明你是如…

網絡安全設備常見部署模式介紹

文章目錄 前言串聯模式路由模式透明模式 旁路模式旁路監聽代理模式正向代理透明代理反向代理 前言 網絡安全設備主要有串聯模式和旁路模式。這些模式在網絡安全架構中扮演著關鍵角色,以確保數據傳輸的安全性和高效性。 串聯模式 串聯模式要求所有流量都必須通過安…

程序員為什么會成為工具人——及其一些破局的思考

一、程序員為什么會成為工具人 程序員為什么會成為工具人的因素分析 序號因素分析1 技術從來不是解決用戶價值問題的那個人,產品才是解決用戶需求痛點創造價值問題的那個人 (技術只是服務于產品的工具,程序員永遠都是在做最后一公里的搬磚&am…

Linux 命令 find 的深度解析與使用

Linux 命令 find 的深度解析與使用 在 Linux 系統中,find 命令是一個功能強大的工具,用于在文件系統中搜索文件或目錄。無論是基于文件名、文件類型、文件大小、文件權限,還是基于文件的最后修改時間等,find 命令都能提供靈活的搜…

Windows家庭版 WSL2非C盤詳細安裝配置與WSL代理設置+WSL基礎環境CUDA安裝

1 WSL2 配置 1.1 WSL 開啟 注意:需要在windows功能中開啟“Hyper-V”和“適用于Linux的Windows子系統”功能 但是!windows家庭版(windows home)是默認沒有Hyper-V功能的,自己手動安裝: 創建一個記事本&a…

前端面試寶典總結4-手搓代碼JavaScript(基礎版)

前端面試寶典總結4之手寫代碼JavaScript(基礎版) 本文章 對各大學習技術論壇知識點,進行總結、歸納自用學習,共勉🙏 上一篇👉: 前端面試寶典總結4-手搓代碼JavaScript(數據處理) 文…

R語言學習 - 柱狀圖

柱狀圖繪制 柱狀圖也是較為常見的一種數據展示方式,可以展示基因的表達量,也可以展示GO富集分析結果,基因注釋數據等。這篇轉錄組工具比較 轉錄組分析工具哪家強?中就使用到比較多堆積柱狀圖。 常規矩陣柱狀圖繪制 有如下4個基…

Audio PsyChat:web端語音心理咨詢系統

這是一個在服務器本地運行的web語音心理咨詢系統,咨詢系統內核使用PsyChat,我們為其制作了Web前端,并拼接了ASR和TTS組件,使局域網內用戶可以通過單純的語音進行交互。其中ASR和TTS組件使用PaddleSpeech API。 使用 使用單卡3090…

信息學奧賽初賽天天練-19-挑戰程序閱讀-探索因數、所有因數平和、質數的奧秘

PDF文檔公眾號回復關鍵字:20240604 1 2023 CSP-J 閱讀程序3 閱讀程序(程序輸入不超過數組成字符串定義的范圍:判斷題正確填√,錯誤填;除特殊說明外,判斷題1.5分,選擇題3分,共計40分&#xff…

C++中的靜態變量與普通變量

在C中,變量的存儲和生命周期可以根據其定義的位置和方式而有所不同。特別是,靜態變量(無論是靜態局部變量還是靜態全局變量)與普通的全局變量和局部變量在行為和生命周期上有顯著的區別。 局部變量 局部變量是在函數內部定義的變…

【微信支付】獲取微信開發信息(全網最詳細!!!)

前言 1、申請商戶號 申請流程與資料 詳細申請步驟 申請開通接入微信支付步驟 2、申請微信小程序 申請小程序步驟 查看小程序AppID 3、微信支付普通商戶與AppID賬號關聯 4、獲取開發中需要的密鑰和證書 4.1、申請證書 4.2、下載證書工具 4.3、證書工具—填寫商戶信息…