Spring Boot 集成 Quartz 使用Cron 表達式實現(xiàn)定時任務
前言
在 Spring Boot 項目中,我們經(jīng)常需要定時執(zhí)行某些任務,例如定期清理數(shù)據(jù)庫、同步數(shù)據(jù)、發(fā)送通知等。Quartz 是一個強大的任務調(diào)度框架,可以通過 Cron 表達式 實現(xiàn)靈活的任務調(diào)度。本篇文章將介紹如何在 Spring Boot 中集成 Quartz 并使用 Cron 表達式 進行任務調(diào)度。
1. 添加 Quartz 依賴
在 Spring Boot 項目中,首先需要引入 Quartz 相關依賴。
如果使用 Maven,在 pom.xml
中添加以下依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
如果使用 Gradle,則添加:
implementation 'org.springframework.boot:spring-boot-starter-quartz'
2. 創(chuàng)建 Quartz 任務
在 Quartz 中,每個定時任務需要繼承 org.quartz.Job
接口,并實現(xiàn) execute
方法。
import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import java.time.LocalDateTime; public class MyQuartzJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Quartz 定時任務執(zhí)行中:" + LocalDateTime.now()); } }
3. 配置 Quartz 任務調(diào)度
Spring Boot 允許通過 SchedulerFactoryBean
配置 Quartz 任務,并使用 @Bean
方式定義任務的調(diào)度規(guī)則。
import org.quartz.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class QuartzConfig { // 定義 JobDetail @Bean public JobDetail myJobDetail() { return JobBuilder.newJob(MyQuartzJob.class) .withIdentity("myQuartzJob") // 任務名稱 .storeDurably() .build(); } // 定義觸發(fā)器,使用 Cron 表達式 @Bean public Trigger myJobTrigger() { return TriggerBuilder.newTrigger() .forJob(myJobDetail()) .withIdentity("myQuartzTrigger") // 觸發(fā)器名稱 .withSchedule(CronScheduleBuilder.cronSchedule("0 0/5 0-7 ? * * *")) // Cron 表達式 .build(); } }
在上述配置中,我們的定時任務:
- 每 5 分鐘執(zhí)行一次
- 每天從 00:00 到 07:59 之間執(zhí)行
- 使用 Cron 表達式
0 0/5 0-7 ? * * *
如果需要 08:00 也執(zhí)行一次,可以修改 Cron 表達式為:
0 0/5 0-8 ? * * *
4. 啟動 Spring Boot 觀察定時任務執(zhí)行
啟動 Spring Boot 項目,觀察控制臺輸出:
Quartz 定時任務執(zhí)行中:2024-03-19T00:00:00
Quartz 定時任務執(zhí)行中:2024-03-19T00:05:00
Quartz 定時任務執(zhí)行中:2024-03-19T00:10:00
...
Quartz 定時任務執(zhí)行中:2024-03-19T07:55:00
如果 Cron 表達式修改為 0 0/5 0-8 ? * * *
,則會多執(zhí)行一次:
Quartz 定時任務執(zhí)行中:2024-03-19T08:00:00
5. Quartz Cron 表達式詳解
Quartz 的 Cron 表達式有 7 個字段,每個字段的含義如下:
字段 | 允許值 | 說明 |
---|---|---|
秒(Seconds) | 0-59 | 任務觸發(fā)的秒數(shù) |
分(Minutes) | 0-59 | 任務觸發(fā)的分鐘數(shù) |
小時(Hours) | 0-23 | 任務觸發(fā)的小時數(shù) |
日期(Day of month) | 1-31 | 任務觸發(fā)的日期(不能與 Day of week 同時指定) |
月份(Month) | 1-12 或 JAN-DEC | 任務觸發(fā)的月份 |
星期(Day of week) | 1-7 或 SUN-SAT | 任務觸發(fā)的星期幾 |
年(可選) | 空 或 1970-2099 | 任務觸發(fā)的年份 |
示例 Cron 表達式:
0 0 12 * * ?
→ 每天中午 12:00 執(zhí)行0 0/30 * * * ?
→ 每 30 分鐘執(zhí)行一次0 15 10 * * ?
→ 每天 10:15 執(zhí)行0 0 8-20/2 * * ?
→ 每天 08:00 - 20:00 之間,每 2 小時執(zhí)行一次
6. 結論
本篇文章介紹了如何在 Spring Boot 中集成 Quartz 進行定時任務調(diào)度,并通過 Cron 表達式 控制任務執(zhí)行時間。Quartz 提供了更強大的任務調(diào)度能力,比 @Scheduled
注解更靈活,適用于復雜的定時任務需求。
你是否在項目中使用 Quartz?歡迎在評論區(qū)分享你的經(jīng)驗! ??
到此這篇關于Spring Boot 集成 Quartz 實現(xiàn)定時任務(Cron 表達式示例)的文章就介紹到這了,更多相關Spring Boot Quartz 定時任務內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解Spring Cloud Finchley版中Consul多實例注冊的問題處理
這篇文章主要介紹了詳解Spring Cloud Finchley版中Consul多實例注冊的問題處理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08Java設計模式之中介者模式(Mediator Pattern)簡介
這篇文章主要介紹了Java設計模式之中介者模式(Mediator Pattern),需要的朋友可以參考下2014-07-07SpringBoot 創(chuàng)建對象常見的幾種方式小結
Spring Boot中創(chuàng)建對象的幾種常見方式包括使用@Component、@Service、@Repository或@Controller注解,本文就來詳細的介紹一下,感興趣的可以了解一下2024-11-11Java使用 try-with-resources 實現(xiàn)自動關閉資源的方法
這篇文章主要介紹了Java使用 try-with-resources 實現(xiàn)自動關閉資源的方法,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06java利用Apache commons codec進行MD5加密,BASE64加密解密,執(zhí)行系統(tǒng)命令
這篇文章主要介紹了java利用apache Commons包進行MD5加密,BASE64加密解密與執(zhí)行系統(tǒng)命令希望對大家有用2017-12-12