Quartz 是功能強大的 Java 定時排程框架,支援叢集、持久化、Cron 表達式。
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version> </dependency> <!-- slf4j + log4j 由 quartz 传递依赖 -->
org.quartz.Job 介面,execute() 為執行邏輯public class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("定時任務執行:" + new Date());
// 業務邏輯...
}
}
public class QuartzDemo {
public static void main(String[] args) throws SchedulerException {
// 1. 建立 SchedulerFactory
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler = sf.getScheduler();
// 2. 定義 JobDetail
JobDetail job = JobBuilder.newJob(MyJob.class)
.withIdentity("myJob", "group1")
.build();
// 3. 定義 Trigger:立即啟動,每 40 秒執行一次,共 10 次
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(40)
.withRepeatCount(10))
.build();
// 4. 註冊並啟動
scheduler.scheduleJob(job, trigger);
scheduler.start();
// 測試:運行一段時間後關閉
Thread.sleep(60_000);
scheduler.shutdown(true);
}
}
| Builder | 用途 |
|---|---|
| JobBuilder | 構建 JobDetail,指定實作類、身份 |
| TriggerBuilder | 構建 Trigger,指定啟動時間、排程策略 |
| SimpleScheduleBuilder | 簡單間隔排程(固定頻率/次數) |
| CronScheduleBuilder | Cron 表達式排程(如 "0 0/5 * * * ?") |
JobStoreTX + 資料庫表(quartz 官網提供建表 SQL)org.quartz.jobStore.isClustered = trueSchedulerFactoryBean