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

Java Quartz 排程器入門實戰:Job 定義、CronTrigger 與 Spring 整合基礎

     編輯:Java 相關知識

核心概念

  • Job:實作 org.quartz.Job,業務邏輯寫在 execute()。
  • JobDetail:Job 的定義描述(名稱、群組、實作類別、資料映射)。
  • Trigger:觸發時機,常用 CronTrigger(Cron 表達式)或 SimpleTrigger(固定間隔)。
  • Scheduler:排程核心,註冊 JobDetail + Trigger 並啟動。

1. 定義 Job

public class MyJob implements Job {
    @Override
    public void execute(JobExecutionContext ctx) throws JobExecutionException {
        System.out.println("執行排程任務 - " + new Date());
    }
}

2. CronTrigger 範例(舊版 API)

SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();

JobDetail job = new JobDetailImpl("job1", "group1", MyJob.class);
CronTrigger trigger = new CronTriggerImpl("trigger1", "group1");
trigger.setCronExpression("0/2 * * * * ? *"); // 每 2 秒

sched.scheduleJob(job, trigger);
sched.start();

3. 新版 API(Quartz 2.x+)推薦寫法

Scheduler sched = StdSchedulerFactory.getDefaultScheduler();

JobDetail job = JobBuilder.newJob(MyJob.class)
    .withIdentity("myJob", "group1")
    .build();

Trigger trigger = TriggerBuilder.newTrigger()
    .withIdentity("myTrigger", "group1")
    .withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ? *"))
    .startNow()
    .build();

sched.scheduleJob(job, trigger);
sched.start();

4. SimpleTrigger 固定間隔(無 Cron 表達式)

Trigger trigger = TriggerBuilder.newTrigger()
    .withIdentity("t1", "g1")
    .withSchedule(SimpleScheduleBuilder.simpleSchedule()
        .withIntervalInMilliseconds(2000)
        .repeatForever())
    .startNow()
    .build();

Cron 表達式速查

* * * * * * ?
秒 分 時 日 月 周 年(可省略)
範例:
0 0 12 * * ?     每天中午 12:00
0/5 * * * * ?    每 5 秒
0 0 10,14,16 * * ?  每天 10:00, 14:00, 16:00

整合 Spring(XML 配置)


    


    
    


    

最佳實踐提醒

  • Job 類別需無參建構子,且為非狀態(或使用 @PersistJobDataAfterExecution + @DisallowConcurrentExecution)。
  • 生產環境建議使用資料庫持久化 JobStore(JDBCJobStore),避免重啟遺失排程。
  • 叢集模式需設定 org.quartz.jobStore.isClustered=true 且共享資料庫。
  • 任務執行時間超過間隔時,預設會併發執行;若需串行,加上 @DisallowConcurrentExecution。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved