SpringBoot3整合Quartz實現(xiàn)定時任務(wù)的示例
1. 什么是 Quartz Scheduler?
Quartz 是 Java 平臺下的一個強大、靈活的調(diào)度庫,它支持復雜的任務(wù)調(diào)度,包括:
- 簡單的任務(wù):按固定頻率或延遲執(zhí)行任務(wù)。
- 基于 Cron 表達式的任務(wù):支持類似于 Linux Cron 的表達式,用于定義復雜的定時任務(wù)。
- 持久化任務(wù):支持將任務(wù)數(shù)據(jù)持久化存儲,以便在應(yīng)用程序重啟后可以恢復任務(wù)狀態(tài)。
2. Spring Boot 3 集成 Quartz Scheduler 的優(yōu)勢
- 無縫集成:通過 Spring Boot 3 的自動配置特性,無需編寫復雜的配置即可使用 Quartz。
- 靈活管理:支持任務(wù)的動態(tài)添加、暫停、恢復和刪除。
- 擴展性:可以輕松擴展任務(wù)調(diào)度系統(tǒng),便于業(yè)務(wù)邏輯的復雜應(yīng)用。
3. Spring Boot 3 集成 Quartz 的步驟
3.1 創(chuàng)建 Spring Boot 項目
可以使用 Spring Initializr 創(chuàng)建項目,選擇以下依賴:
- Spring Web
- Quartz Scheduler

3.2 添加 Quartz 依賴
如果使用的是手動創(chuàng)建的項目,可以在 pom.xml 中添加 Quartz 的依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
3.3 配置 Quartz 屬性
在 application.yml 或 application.properties 文件中配置 Quartz 的基本屬性,例如任務(wù)存儲和調(diào)度方式。
以下是 application.yml 配置示例:
spring:
application:
name: spring-boot3-19-quartz
quartz:
job-store-type: memory # 儲類型為內(nèi)存存儲
properties:
org:
quartz:
threadPool:
threadCount: 5 # 配置線程池線程數(shù)為 5
jobStore:
misfireThreshold: 60000 # 設(shè)置作業(yè)存儲的錯過觸發(fā)閾值為 60000 毫秒(1分鐘)
這里使用了內(nèi)存存儲方式(job-store-type: memory),也可以根據(jù)需要配置數(shù)據(jù)庫存儲任務(wù)信息。
3.4 創(chuàng)建一個 Quartz 任務(wù)類
創(chuàng)建一個簡單的 Quartz 任務(wù)類,需要實現(xiàn) Job 接口,并重寫 execute 方法:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class SampleJob implements Job {
private static final Logger logger = LoggerFactory.getLogger(SampleJob.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
logger.info("Executing Sample Job at: " + context.getFireTime());
}
}
3.5 配置任務(wù)調(diào)度器
在 Spring Boot 3 中,可以通過 @Configuration 創(chuàng)建 Quartz 的調(diào)度器,并配置定時任務(wù)的觸發(fā)器(Trigger)和任務(wù)詳情(JobDetail)。
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class QuartzConfig {
@Bean
public JobDetail sampleJobDetail() {
return JobBuilder.newJob(SampleJob.class)
.withIdentity("sampleJob")
.storeDurably()
.build();
}
@Bean
public Trigger sampleJobTrigger() {
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(10) // 每 10 秒執(zhí)行一次
.repeatForever();
return TriggerBuilder.newTrigger()
.forJob(sampleJobDetail())
.withIdentity("sampleJobTrigger")
.withSchedule(scheduleBuilder)
.build();
}
}
sampleJobDetail方法定義了任務(wù)的基本信息,包括任務(wù)類和名稱。sampleJobTrigger方法定義了觸發(fā)器的調(diào)度策略,這里設(shè)置為每 10 秒執(zhí)行一次。
3.6 使用 Cron 表達式配置任務(wù)
除了簡單的時間間隔,還可以通過 Cron 表達式實現(xiàn)更靈活的調(diào)度。以下示例展示如何使用 Cron 表達式配置任務(wù)觸發(fā)器。
import org.quartz.CronScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
@Bean
public Trigger cronJobTrigger() {
return TriggerBuilder.newTrigger()
.forJob(sampleJobDetail())
.withIdentity("cronJobTrigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0/1 * 1/1 * ? *")) // 每分鐘執(zhí)行一次
.build();
}
在這個例子中,Cron 表達式 "0 0/1 * 1/1 * ? *" 表示每分鐘執(zhí)行一次任務(wù)。
4. 運行應(yīng)用并查看日志
配置完成后,啟動 Spring Boot 應(yīng)用。Quartz Scheduler 會按照配置執(zhí)行 SampleJob 任務(wù)。您可以在控制臺中看到日志輸出,類似如下:
2024-11-13T21:07:39.910+08:00 INFO 11984 --- [spring-boot3-18-quartz] [eduler_Worker-4] c.coderjia.boot318quartz.job.SampleJob : Executing Sample Job at: Wed Nov 13 21:07:39 CST 2024
每 10 秒執(zhí)行一次效果:

每分鐘執(zhí)行一次效果:

5. 動態(tài)管理 Quartz 任務(wù)
可以在代碼中動態(tài)地添加、暫停、恢復和刪除任務(wù)。例如,以下是動態(tài)添加任務(wù)的示例:
package com.coderjia.boot318quartz;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author CoderJia
* @create 2024/11/13 下午 09:25
* @Description
**/
@Service
public class QuartzService {
private final Scheduler scheduler;
@Autowired
public QuartzService(Scheduler scheduler) {
this.scheduler = scheduler;
}
public void scheduleJob(JobDetail jobDetail, Trigger trigger) {
try {
scheduler.scheduleJob(jobDetail, trigger);
} catch (Exception e) {
e.printStackTrace();
}
}
public void pauseJob(String jobName, String jobGroup) {
try {
JobKey jobKey = new JobKey(jobName, jobGroup);
scheduler.pauseJob(jobKey);
System.out.println("Job paused: " + jobKey);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public void resumeJob(String jobName, String jobGroup) {
try {
JobKey jobKey = new JobKey(jobName, jobGroup);
scheduler.resumeJob(jobKey);
System.out.println("Job resumed: " + jobKey);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public void deleteJob(String jobName, String jobGroup) {
try {
JobKey jobKey = new JobKey(jobName, jobGroup);
boolean deleted = scheduler.deleteJob(jobKey);
if (deleted) {
System.out.println("Job deleted: " + jobKey);
} else {
System.out.println("Job not found: " + jobKey);
}
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
調(diào)用 scheduleJob 方法可以動態(tài)地添加新的任務(wù)。類似地,使用 scheduler.pauseJob() 和 scheduler.deleteJob() 可以暫?;騽h除任務(wù)。
6. 總結(jié)
通過將 Quartz 與 Spring Boot 3 結(jié)合,我們可以實現(xiàn)強大而靈活的定時任務(wù)調(diào)度系統(tǒng)。本文介紹了 Quartz 的基本配置和使用方法,包括如何配置任務(wù)、觸發(fā)器,以及使用 Cron 表達式實現(xiàn)復雜的調(diào)度策略。
以上就是SpringBoot3整合Quartz實現(xiàn)定時任務(wù)的示例的詳細內(nèi)容,更多關(guān)于SpringBoot3 Quartz定時任務(wù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Maven 多模塊父子工程的實現(xiàn)(含Spring Boot示例)
這篇文章主要介紹了Maven 多模塊父子工程的實現(xiàn)(含Spring Boot示例),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04
SpringBoot整合FastExcel實現(xiàn)導入導出功能的操作詳解
在微服務(wù)項目中經(jīng)常會涉及到excel的導入導出功能,隨著要處理的業(yè)務(wù)數(shù)據(jù)量越來越大,這也對程序提出了更高的要求,下面我們就來看看SpringBoot如何整合FastExcel實現(xiàn)導入導出功能吧2025-10-10
java中@EnableAutoConfiguration注解使用
在Spring Boot框架中,@EnableAutoConfiguration是一種非常重要的注解,本文就來介紹一下java中@EnableAutoConfiguration注解使用,感興趣的可以了解一下2023-11-11
java ant包中的org.apache.tools.zip實現(xiàn)壓縮和解壓縮實例詳解
這篇文章主要介紹了java ant包中的org.apache.tools.zip實現(xiàn)壓縮和解壓縮實例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04

