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

Quartz 排程框架實作教學:Job、Trigger、Scheduler 核心組件與 Cron 運算式

     編輯:Java 綜合教學

Quartz 排程框架實作教學:Job、Trigger、Scheduler 核心組件與 Cron 運算式

Quartz 是 Java 開源作業排程框架,核心三大組件:Job(工作)、Trigger(觸發器)、Scheduler(調度器)。本文示範完整整合流程與 Cron 運算式應用。

核心概念

組件說明
Job介面,唯一方法 execute(JobExecutionContext),實作具體業務邏輯
JobDetailJob 描述類,含名稱、群組、實作類、JobDataMap 等靜態資訊
Trigger定義觸發時間規則:SimpleTrigger(固定間隔)、CronTrigger(Cron 運算式)
Scheduler調度核心,負責註冊 JobDetail + Trigger 並啟動排程

完整實作範例

1. 領域模型 Plan.java

public class Plan {
    private String date, task;
    // getter/setter/建構子/toString 略
}

2. 服務類 RemindService.java

public class RemindService {
    public List getPlansForToday() {
        // 實際應從 DB 查詢,此處模擬資料
        List list = new ArrayList<>();
        list.add(new Plan("2016-11-03", "專案會議"));
        list.add(new Plan("2016-11-04", "程式碼審查"));
        return list;
    }
    public void outputPlans() {
        for (Plan p : getPlansForToday())
            System.out.println("計劃:" + p.getDate() + " " + p.getTask());
    }
}

3. Job 實作 RemindJob.java

public class RemindJob implements Job {
    private RemindService service = new RemindService();
    public void execute(JobExecutionContext ctx) throws JobExecutionException {
        service.outputPlans();
    }
    // getter/setter 供 Spring 注入
}

4. 排程啟動類 TestJob.java

public class TestJob {
    public static void doRemind() throws SchedulerException {
        // 1. 定義 JobDetail
        JobDetail job = JobBuilder.newJob(RemindJob.class)
                .withIdentity("job1", "group1").build();

        // 2. 定義 CronTrigger:每週五 16:34:00 執行(2016 年)
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "group1")
                .withSchedule(CronScheduleBuilder.cronSchedule("0 34 16 ? * 5#1 2016"))
                .build();

        // 3. 取得 Scheduler 並啟動
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.scheduleJob(job, trigger);
        scheduler.start();
        // 測試用:睡眠 10 秒後關閉
        // Thread.sleep(10000); scheduler.shutdown();
    }
    public static void main(String[] args) throws Exception { doRemind(); }
}

Cron 運算式詳細說明

格式:秒 分 時 日 月 週 [年](6 或 7 個欄位)

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

常用符號

  • *:所有值
  • ?:不指定值(日/週 二擇一)
  • -:範圍,如 10-12
  • ,:列舉,如 MON,WED,FRI
  • /:增量,如 0/15 每 15 分鐘
  • L:最後一天/最後一個週X
  • W:最近工作日
  • #:第 N 個週X,如 5#1 = 月內第一個週五

範例解析

0 34 16 ? * 5#1 2016
│ │  │  │ │ │  └ 年份 2016
│ │  │  │ │ └ 月份:每月
│ │  │  │ └ 週:月內第 1 個週五 (5=FRIDAY, #1=第1個)
│ │  │ └ 日:不指定 (?)
│ │ └ 時:16 點
│ └ 分:34 分
└ 秒:0 秒

Spring 整合建議

  • 使用 SchedulerFactoryBean 管理 Scheduler 生命週期
  • Job 實作類交由 Spring 容器管理,支援 @Autowired 注入 Service
  • Trigger 與 JobDetail 可在 XML 或 @Configuration 中宣告

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