| 接口/類 | 職責 |
|---|---|
Job | 任務接口,唯一方法 execute(JobExecutionContext),業務邏輯入口 |
JobDetail | 任務描述:綁定 Job 實現類、名稱/組、持久化數據等靜態信息 |
Trigger | 觸發器:定義觸發時間規則(Simple/Cron) |
Calendar | 日曆:排除/包含特定時間區間,輔助 Trigger 限制觸發 |
Scheduler | 調度容器:由 SchedulerFactory 創建,管理任務生命周期 |
public class TestJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Hello World! - " + new Date());
}
}
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。tablePrefix。org.quartz.jobStore.isClustered: true(配置文件或代碼設置)。instanceName 建議配置為 AUTO,自動生成唯一標識。checkin_interval 默認 15s。Quartz 以 Job+Trigger 解耦業務與調度,支持 Simple/Cron 靈活觸發,配合 JDBC JobStore 實現高可用集群。掌握 Builder 流式 API、屬性配置、表結構,即可應對企業級定時任務場景。