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

Java 定時任務框架 Quartz 2.x 入門指南:核心 API、配置與集群

     編輯:Java 相關知識

一、核心接口速覽

接口/類職責
Job任務接口,唯一方法 execute(JobExecutionContext),業務邏輯入口
JobDetail任務描述:綁定 Job 實現類、名稱/組、持久化數據等靜態信息
Trigger觸發器:定義觸發時間規則(Simple/Cron)
Calendar日曆:排除/包含特定時間區間,輔助 Trigger 限制觸發
Scheduler調度容器:由 SchedulerFactory 創建,管理任務生命周期

二、快速上手代碼示例

1. 實現 Job

public class TestJob implements Job {
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Hello World! - " + new Date());
    }
}

2. 調度配置(Quartz 2.2.1 API)

public class QuartzTest {
    public static void main(String[] args) throws SchedulerException, ParseException {
        // 任務詳情
        JobDetail jobDetail = JobBuilder.newJob(TestJob.class)
            .withIdentity("testJob_1", "group_1")
            .build();

        // 觸發器:立即啟動,每 10 秒執行一次,重複 5 次(共 6 次)
        Trigger trigger = TriggerBuilder.newTrigger()
            .withIdentity("trigger_1", "group_1")
            .startNow()
            .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(10)
                .withRepeatCount(5))
            .build();

        // 啟動調度器
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();
        sched.scheduleJob(jobDetail, trigger);
        sched.start();
    }
}

注意:Quartz 2.x 大量棄用舊 API,請參考官網文檔 https://www.quartz-scheduler.org/。

三、屬性配置文件詳解

# 默認屬性文件,供 StdSchedulerFactory 讀取
org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 10
org.quartz.threadPool.threadPriority: 5

# 持久化配置(集群必備)
org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties: true
org.quartz.jobStore.tablePrefix: qrtz_
org.quartz.jobStore.dataSource: qzDS

# 數據源
org.quartz.dataSource.qzDS.driver: com.mysql.jdbc.Driver
org.quartz.dataSource.qzDS.URL: jdbc:mysql://localhost:3306/quartzdb
org.quartz.dataSource.qzDS.user: root
org.quartz.dataSource.qzDS.password: 123456
org.quartz.dataSource.qzDS.maxConnection: 10

四、數據庫表結構說明

持久化需預先建表,SQL 腳本位於 Quartz 包 docs/dbTables 目錄。核心表:

  • qrtz_job_details:任務詳情,job_class_name 存全限定類名,job_data Blob 存序列化 JobDataMap。
  • qrtz_triggers:觸發器信息,trigger_state 狀態(ACQUIRED/WAITING 等)。
  • qrtz_cron_triggers:Cron 表達式存儲。
  • qrtz_scheduler_state:集群實例心跳,instance_name、last_checkin_time、checkin_interval。

五、集群部署要點

  1. 所有節點共享同一數據庫,配置相同 tablePrefix。
  2. org.quartz.jobStore.isClustered: true(配置文件或代碼設置)。
  3. 節點 instanceName 建議配置為 AUTO,自動生成唯一標識。
  4. 保證數據庫時間同步,心跳間隔 checkin_interval 默認 15s。

六、總結

Quartz 以 Job+Trigger 解耦業務與調度,支持 Simple/Cron 靈活觸發,配合 JDBC JobStore 實現高可用集群。掌握 Builder 流式 API、屬性配置、表結構,即可應對企業級定時任務場景。

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