Quartz 是 Java 生態中功能最強大、應用最廣泛的開源任務調度框架,支持複雜的 Cron 表達式、集群部署、持久化、監聽器等企業級特性。本文通過六步驟完整演示:從任務定義、業務邏輯、初始化配置、Web 容器啟動註冊、時間觸發配置到 Cron 表達式詳解,構建一個可生產部署的定時任務體系。

核心:實現 org.quartz.Job 接口,重寫 execute(JobExecutionContext context) 方法,編寫業務邏輯。可通過 context.getMergedJobDataMap() 獲取傳遞參數。

將具體業務邏輯封裝在獨立類中,Job 類中調用,符合單一職責原則,便於測試與維護。

核心邏輯:
SchedulerFactory → 獲取 Scheduler;JobDetail(綁定 Job 類、參數);Trigger(綁定 Cron 表達式、啟動/結束時間);scheduler.scheduleJob(jobDetail, trigger) 註冊;scheduler.start()。
在 web.xml 中配置 ServletContextListener,容器啟動時調用初始化類:
<listener>
<listener-class>com.yourpackage.QuartzInitListener</listener-class>
</listener>

可在屬性文件或代碼中配置 Cron 表達式,如:
# 每天凌晨 2:00 執行
quartz.cron.expression=0 0 2 * * ?

標準 Cron 表達式:秒 分 時 日 月 星期 [年](7 位,年可選)。
| 字段 | 允許值 | 特殊字符 |
|---|---|---|
| 秒 | 0-59 | , - * / |
| 分 | 0-59 | , - * / |
| 時 | 0-23 | , - * / |
| 日 | 1-31 | , - * ? / L W |
| 月 | 1-12 / JAN-DEC | , - * / |
| 星期 | 1-7 / SUN-SAT | , - * ? / L # |
| 年(可選) | 1970-2099 | , - * / |
特殊字符含義:
*:所有值;?:不指定值(日/星期二擇一);-:範圍;,:列舉;/:增量(如 0/15 表示每 15 秒);L:最後(日:月最後一天;星期:最後一周即周六);W:最近工作日(僅日字段);#:第 N 個星期幾(如 6#3 表示第 3 個周五)。0 0 2 * * ?:每天 02:00:000 0/5 * * * ?:每 5 分鐘0 0 10,14,16 * * ?:每天 10:00、14:00、16:000 0/30 9-17 * * MON-FRI:工作日 9-17 點每 30 分鐘0 0 0 1 * ?:每月 1 號 00:000 0 0 ? * 6L:每月最後一個周五 00:00JDBC-JobStore 持久化任務,防止重啟丟失;org.quartz.jobStore.isClustered=true,需共享數據庫;