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

Spring 整合 Quartz 任務調度完整配置指南

     編輯:Java 相關知識

Quartz 是企業級任務調度框架標準,Spring 通過 spring-context-support 模組對其進行了深度封裝與簡化。本文演示基於 XML 配置的 Spring 整合 Quartz 全流程,涵蓋 Job 定義、觸發器配置、Cron 表達式詳解與啟動驗證。

一、核心組件架構

  1. Job Bean(業務邏輯):普通 POJO,無需實現特定介面。
  2. MethodInvokingJobDetailFactoryBean:將目標 Bean 與方法綁定為 JobDetail。
  3. CronTriggerBean:基於 Cron 表達式的觸發器,關聯 JobDetail。
  4. SchedulerFactoryBean:調度器工廠,統一管理觸發器,控制啟動延遲與自動啟動。

二、業務 Job 類

package com.kay.quartz;

public class QuartzJob {
    public void work() {
        System.out.println("Quartz 任務調度執行:" + new java.util.Date());
        // 實際業務:發送報表、清理臨時文件、同步數據等
    }
}

三、Spring XML 配置詳解




    
    

    
    
        
        
        
    

    
    
        
        
        
    

    
      
        
            
                
            
        
        
        
        
        
    


四、啟動測試類

package com.kay.quartz;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainTest {
    public static void main(String[] args) {
        System.out.println("Test start.");
        ApplicationContext ctx = new ClassPathXmlApplicationContext("quartz-config.xml");
        // lazy-init="false" 時無需手動 getBean 即可啟動
        System.out.println("Test end. Scheduler running in background...");
        // 防止主線程結束導致 JVM 退出(測試用)
        try { Thread.sleep(60000); } catch (InterruptedException ignored) {}
    }
}

五、Cron 表達式完整參考

格式:秒 分 時 日 月 周 [年](7 個域,年可選)

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

特殊字符含義

  • *:所有值
  • ?:無具體值(僅日/周域互斥使用)
  • -:範圍,如 10-12
  • ,:枚舉,如 MON,WED,FRI
  • /:增量,如 0/15 表示從 0 開始每 15 分鐘
  • L:Last,日域=月末最後一天,周域=最後一個周X(如 6L=最後一個週五)
  • W:最近工作日,如 15W=離 15 號最近的工作日
  • #:第 N 個周X,如 6#3=第 3 個週五

常用表達式示例

0 0 12 * * ?          每天中午 12:00
0 15 10 ? * *         每天 10:15
0 0/5 14 * * ?        每天 14:00-14:55 每 5 分鐘
0 0/5 14,18 * * ?     每天 14:00-14:55 和 18:00-18:55 每 5 分鐘
0 15 10 ? * MON-FRI   工作日 10:15
0 15 10 15 * ?        每月 15 號 10:15
0 15 10 L * ?         每月最後一天 10:15
0 15 10 ? * 6L        每月最後一個週五 10:15
0 15 10 ? * 6#3       每月第三個週五 10:15
0 6 * * *             每天 06:00
0 */2 * * *           每 2 小時

六、生產環境進階配置建議

  1. 持久化 JobStore:配置 dataSource + JobStoreTX,任務狀態存入數據庫,支援集群與重啟恢復。
  2. 集群模式:org.quartz.jobStore.isClustered=true,多節點自動負載均衡與故障轉移。
  3. 線程池調優:org.quartz.threadPool.threadCount 根據並發任務數設置(默認 10)。
  4. 誤火策略:misfireInstruction 定義錯過觸發時的補償行為(如立即執行、放棄、下次執行)。
  5. 監控指標:暴露 Scheduler 狀態、執行中任務數、隊列積壓數至 Prometheus/Grafana。

Spring + Quartz 組合提供了開箱即用的聲明式調度能力,配合 Cron 表達式的靈活性,能滿足 90% 以上的定時任務場景。生產環境建議啟用持久化與集群模式,確保高可用與數據一致性。

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