一、核心區別對比表
對比項 | Unix Crontab | Quartz | Spring @Scheduled |
---|---|---|---|
表達式位數 | 5 位 | 6 位或 7 位 | 6 位 |
秒級支持 | ? 不支持(最小單位是分鐘) | ? 支持 | ? 支持 |
年字段 | ? 無 | ? 可選第7位 | ? 不支持 |
特殊符號支持 | 較少(如 * , , , - , / ) | 很豐富 | 和 Quartz 類似 |
使用環境 | Linux 系統層 | Java Job 框架 | Spring 應用內部調度 |
典型用法 | 系統定時任務 | 分布式定時任務調度 | Java/Spring Bean 定時執行 |
二、表達式格式對比
?1. Unix Crontab(5 位)
* * * * * <command>
| | | | |
| | | | +----- 星期 (0-7)(0和7都代表周日)
| | | +------- 月份 (1 - 12)
| | +--------- 一個月中的第幾天 (1 - 31)
| +----------- 小時 (0 - 23)
+------------- 分鐘 (0 - 59)
? 不支持秒,表達式長度固定為 5 位。
? 2. Quartz(6~7 位)
秒 分 時 日 月 星期 [年]
示例:
0 0 12 * * ? // 每天中午 12 點執行
0/5 * * * * ? // 每 5 秒執行一次
0 0 0 1 1 ? 2025 // 2025年1月1日零點執行一次
?
代表“無特定值”,通常在日
和星期
中配合使用。
? 3. Spring @Scheduled(6 位,基于 Quartz,但不支持年份)
@Scheduled(cron = "0 0 12 * * ?") // 每天中午 12 點
public void task() {// your code
}
注意:
-
Spring 的
@Scheduled(cron = "...")
默認是 Quartz 格式的 6 位表達式(秒開始),不包含年。 -
要啟用定時任務,需在配置類或主類加上:
@EnableScheduling
🧪 三、語法小差異舉例
表達式 | Unix crontab | Quartz/Spring | 說明 |
---|---|---|---|
0 0 * * * | ? | ? | Unix 表示每小時整點 |
0 0 12 * * ? | ? | ? | Quartz 表示每天中午12點,Unix 無 ? |
*/5 * * * * | ? | ? | 每 5 分鐘執行一次 |
0/10 * * * * ? | ? | ? | 每 10 秒執行一次,Quartz only |
🛠 四、總結建議
使用場景 | 建議用法 |
---|---|
Linux 系統級任務 | crontab (簡單高效) |
Java 后臺任務(復雜計劃、集群調度) | Quartz |
Spring 應用內部任務 | @Scheduled (配合 @EnableScheduling ) |