首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Cron 表達式完全手冊:語法詳解、特殊字符、實戰案例與在線生成技巧

     編輯:Java 綜合教學

Cron 表達式基礎結構

Cron 表達式是一個字符串,由 6 或 7 個域組成,空格分隔:

秒 分 時 日 月 星期 [年]

域取值範圍與允許特殊字符

域範圍允許字符
秒0-59, - * /
分0-59, - * /
時0-23, - * /
日1-31, - * / ? L W C
月1-12 / JAN-DEC, - * /
星期1-7 / SUN-SAT, - * / ? L C #
年(可選)1970-2099, - * /

特殊字符含義深度解析

字符名稱含義示例
*通配符匹配該域所有值* * * * * * 每秒執行
?無具體值僅用於「日」和「星期」,避免衝突每月 20 日觸發:0 0 12 20 * ?
-範圍包含邊界10-20 表示 10 到 20
/增量/步長起始值/每隔多少5/15 表示 5、20、35、50 分
,枚舉列出多個值MON,WED,FRI 週一三五
LLast「日」=月最後一天,「星期」=最後一個星期六5L = 最後一個星期四
WWorkday最近工作日(僅「日」域)15W = 15 日若週末則順延
LW組合月最後一個工作日(即最後週五)LW
#第 N 個「星期」域:第幾個星期幾4#2 = 第 2 個星期三
CCalendar關聯日曆(較少用)-

核心規則:日與星期互斥

「日」和「星期」不能同時指定具體值,必須有一個用 ?。否則邏輯衝突導致不可預期行為。

經典實戰案例庫

需求Cron 表達式說明
每天中午 12:000 0 12 * * ?標準每日定時
每天 10:150 15 10 * * ?
工作日 10:150 15 10 ? * MON-FRI週一到週五
每半小時 (9-17點)0 0/30 9-17 * * ?工作時間輪詢
每月 1 號 02:000 0 2 1 * ?月度結算
每月最後一天 10:150 15 10 L * ?L 表示最後一天
每月最後一個週五 10:150 15 10 ? * 6L6=週五,L=最後一個
每月第 3 個週五 10:150 15 10 ? * 6#3#3 表示第 3 個
2002-2005 年每月最後週五0 15 10 ? * 6L 2002-2005年份範圍
每分鐘 (14:00-14:59)0 * 14 * * ?分鐘域 *
每 5 分鐘 (14:00-14:55)0 0/5 14 * * ?步長 5
14:00-14:05 每分鐘0 0-5 14 * * ?範圍 0-5
14:00 和 18:00 每 5 分鐘0 0/5 14,18 * * ?多時段
每年 3 月週三 14:10/14:440 10,44 14 ? 3 WED月+星期組合

Spring @Scheduled 使用示例

@Component
public class ScheduledTasks {
    // 每天凌晨 2 點執行
    @Scheduled(cron = "0 0 2 * * ?")
    public void dailyCleanup() { ... }

    // 工作日每半小時
    @Scheduled(cron = "0 0/30 9-17 ? * MON-FRI")
    public void businessHourCheck() { ... }
}

在線生成與驗證工具推薦

避坑指南

  1. 秒域不可省略:Quartz/Spring 為 6/7 域,Linux crontab 為 5 域(無秒)
  2. 星期數字:1=SUN, 7=SAT(或 SUN-SAT 字符串)
  3. ? 必用於日/星期之一:雙方都具體值會報錯
  4. L/W/# 僅限特定域:濫用導致解析失敗
  5. 測試驗證:上線前用在線工具生成未來 10 次執行時間確認

掌握 Cron 表達式,讓定時任務配置從「猜謎遊戲」變為「精確可控」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved