首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

cron4j 定時任務表達式:每天凌晨 4 點執行,正確寫法是「0 4 * * * ?」而非 Quartz 風格

     編輯:程式設計疑難解答

使用 cron4j 插件配置定時任務,照搬 Quartz/Spring 的 0 0 4 * * ? 卻報 InvalidPatternException。根因:cron4j 表達式只有 5/6 段(無秒欄位),順序為 分 時 日 月 周 [年]。本文詳解差異並給出正確配置。

錯誤配置與異常

UpdateOrderStatusJob.cron=0 0 4 * * ?  # 錯誤:含秒欄位,cron4j 不支援

Exception: it.sauronsoftware.cron4j.InvalidPatternException: invalid pattern: "0 0 4 * * ?"

cron4j vs Quartz 表達式對比

欄位Quartz (6/7段)cron4j (5/6段)
1秒 (0-59)分 (0-59)
2分 (0-59)時 (0-23)
3時 (0-23)日 (1-31)
4日 (1-31)月 (1-12)
5月 (1-12)周 (0-7) (0或7=Sun)
6周 (1-7)年 (可選)
7年 (可選)-

正確配置:每天凌晨 4 點

# cron4j 格式:分 時 日 月 周
UpdateOrderStatusJob.cron=0 4 * * *
  • 0:第 0 分
  • 4:第 4 時(凌晨 4 點)
  • * * *:每天、每月、每周

驗證方式

// 測試代碼
import it.sauronsoftware.cron4j.SchedulingPattern;

public class TestCron4j {
    public static void main(String[] args) {
        SchedulingPattern pattern = new SchedulingPattern("0 4 * * *");
        System.out.println("Next: " + pattern.next(System.currentTimeMillis()));
        // 輸出下一次執行時間戳,驗證是否為明天 04:00
    }
}

常用 cron4j 表達式速查

需求表達式說明
每分鐘* * * * *
每小時整點0 * * * *分=0
每天 04:000 4 * * *分=0, 時=4
工作日 09:3030 9 * * 1-5周一至五
每月 1 號 00:000 0 1 * *日=1
每年 1 月 1 號0 0 1 1 *月=1, 日=1

避坑指南

  1. 不要照搬 Quartz 表達式:cron4j 無秒欄位,欄位順序左移一位。
  2. 問號 ? 不支援:cron4j 無「日/周衝突」概念,直接用 *。
  3. 年欄位可選:6 段格式 分 時 日 月 周 年,通常 5 段足夠。
  4. 時區:cron4j 使用 JVM 默認時區,跨時區部署需显式設定 TimeZone.setDefault()。

下次配置 cron4j,默念口訣:「分時日月周,無秒無問號」,一把過。

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