前言
Quartz CronTrigger 基於日曆概念實現複雜排程,比簡單間隔觸發更強大。本文系統整理 Cron 表達式語法、特殊字符含義、字段取值範圍及 20+ 實用範例,作為排程配置速查手冊。
一、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 | , - * / |
二、特殊字符深度解析
| 符號 | 名稱 | 含義 | 示例 |
| * | 所有值 | 匹配字段所有合法值 | * * * * * ? 每秒觸發 |
| ? | 不指定值 | 僅用於 日/周 字段,表示無具體值 | 0 0 12 ? * * 每天中午 12 點 |
| - | 範圍 | 包含邊界的連續範圍 | MON-FRI 週一到週五 |
| , | 枚舉 | 列出多個離散值 | MON,WED,FRI 週一三五 |
| / | 增量 | n/m 從 n 開始每 m 單位 | 0/15 每分鐘 0、15、30、45 秒 |
| L | 最後 | 日字段=月最後一天;周字段=最後一個周X | 6L 本月最後一個週五 |
| W | 工作日 | 日字段專用,最近工作日(週一至週五) | 15W 最接近 15 號的工作日 |
| # | 第 N 個 | 周字段專用,本月第 N 個周 X | 6#3 本月第三個週五 |
| C | 日曆 | 關聯日曆,較少用 | - |
三、高頻實用範例庫
| 需求 | Cron 表達式 | 說明 |
| 每 5 秒 | */5 * * * * ? | 秒字段 */5 |
| 每 1 分鐘 | 0 */1 * * * ? | 分字段 */1 |
| 每天 23:00 | 0 0 23 * * ? | 時=23,分秒=0 |
| 每天 01:00 | 0 0 1 * * ? | 時=1 |
| 每月 1 號 01:00 | 0 0 1 1 * ? | 日=1 |
| 每月最後一天 23:00 | 0 0 23 L * ? | 日字段 L |
| 每週日 01:00 | 0 0 1 ? * L | 周字段 L (最後一周=週日) |
| 第 26、29、33 分 | 0 26,29,33 * * * ? | 分字段枚舉 |
| 每天 0、13、18、21 時 | 0 0 0,13,18,21 * * ? | 時字段枚舉 |
| 工作日 09:30 | 0 30 9 ? * MON-FRI | 周字段範圍 |
| 每月第三個週五 10:00 | 0 0 10 ? * 6#3 | 周字段 # 語法 |
| 每季度最後一天 23:59 | 0 59 23 L 3,6,9,12 ? | 月字段枚舉 + 日 L |
四、常見錯誤與避坑
- 日與周衝突:兩字段不能同時具體指定,必須一個用
?
- 秒/分/時範圍越界:秒分 0-59,時 0-23
- 年字段誤用:6 字段表達式不支援年,需 7 字段版本
L 與列表/範圍不能組合:L-3、L,15 均無效
W 只能用於具體日期:15W 合法,*W 非法
五、在線驗證工具推薦
六、總結
掌握 Cron 表達式核心在於:理解 6/7 字段語義、熟練 9 大特殊字符組合、避開日周互斥陷阱。建議收藏本文範例庫,配置排程時直接對照複製微調,並用在線工具驗證下次觸發時間,確保排程精準可控。