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

Quartz 任務調度框架入門:核心概念與完整示例

     編輯:Java 綜合教學

Quartz 任務調度框架入門:核心概念與完整示例

Quartz 是開源企業級任務調度框架,核心抽象三大組件:Job(任務)、Trigger(觸發器)、Scheduler(調度器)。本文通過一個「日程提醒」完整示例,講解核心 API 與 Cron 表達式用法。

核心概念

  • Job:實現 org.quartz.Job 接口,execute(JobExecutionContext) 執行業務邏輯。
  • Trigger:定義觸發規則,常用 CronTrigger 支援 Cron 表達式。
  • Scheduler:綁定 Job 與 Trigger,啟動調度。

示例:日程提醒系統

實體類

public class Plan {
    private String date;
    private String task;
    // getter/setter/toString/構造器省略
}

業務服務

public class RemindService {
    public void printPlan(String userName) {
        List<Plan> plans = getPlansFormToday(userName);
        System.out.println(userName + " //");
        for (Plan p : plans) System.out.println(p + " \\\\");
    }
    private List<Plan> getPlansFormToday(String userName) {
        // 模擬查詢
        List<Plan> list = new ArrayList<>();
        list.add(new Plan("2016-11-3 14:31:11", "陶研會|地點:會議室C01"));
        list.add(new Plan("2016-11-3 14:31:20", "總裁辦公室|地點:總裁辦公室"));
        return list;
    }
}

Job 實現

public class RemindJob implements Job {
    private RemindService service = new RemindService();
    public void execute(JobExecutionContext context) throws JobExecutionException {
        service.printPlan("你好!");
        // 可從 context 獲取參數、觸發器名、任務名等
        JobDataMap map = context.getJobDetail().getJobDataMap();
        System.out.println(map.get("happykey"));
        System.out.println("TriggerName: " + context.getTrigger().getKey().getName());
        System.out.println("JobName: " + context.getJobDetail().getKey().getName());
    }
    // getter/setter for service
}

調度啟動類

public class Test {
    public static void main(String[] args) throws SchedulerException {
        // 1. 定義 JobDetail
        JobDetail job = JobBuilder.newJob(RemindJob.class)
                .withIdentity("job1", "group1").build();
        job.getJobDataMap().put("happykey", "自定義參數值");

        // 2. 定義 CronTrigger:每月第一個週四 16:17 觸發(2016年)
        CronTrigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "myTriggerGroup")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 17 16 ? * 5#1 2016"))
                .build();

        // 3. 調度器啟動
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.scheduleJob(job, trigger);
        scheduler.start();
        // 測試用睡眠,生產環境不關閉
        Thread.sleep(60_000);
        scheduler.shutdown();
    }
}

關鍵 API 解析

  • JobBuilder.newJob():構建 JobDetail,設置身份標識、持久化參數。
  • TriggerBuilder + CronScheduleBuilder:靈活構建複雜時間規則。
  • StdSchedulerFactory:獲取 Scheduler 實例。
  • scheduler.scheduleJob(job, trigger):註冊並開始調度。

常用 Cron 表達式範例

表達式含義
0 0 12 * * ?每天中午 12:00
0 15 10 ? * MON-FRI周一至周五 10:15
0 0 12 ? * 6L每月最後一個週六 12:00
0 15 10 ? * 6#3每月第三個週五 10:15

Quartz 功能強大,支援集群、持久化、事務、監聽器等企業級特性。掌握核心三組件與 Cron 表達式,即可覆蓋 90% 以上的定時任務場景。

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