当前位置: 首页 > news >正文

Spring Boot 集成 Quartz 实现定时任务(Cron 表达式示例)

Spring Boot 集成 Quartz 实现定时任务(Cron 表达式示例)

      • 前言
      • 1. 添加 Quartz 依赖
      • 2. 创建 Quartz 任务
      • 3. 配置 Quartz 任务调度
      • 4. 启动 Spring Boot 观察定时任务执行
      • 5. Quartz Cron 表达式详解
      • 6. 结论

前言

在 Spring Boot 项目中,我们经常需要定时执行某些任务,例如定期清理数据库、同步数据、发送通知等。Quartz 是一个强大的任务调度框架,可以通过 Cron 表达式 实现灵活的任务调度。本篇文章将介绍如何在 Spring Boot 中集成 Quartz 并使用 Cron 表达式 进行任务调度。


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. 创建 Quartz 任务

在 Quartz 中,每个定时任务需要继承 org.quartz.Job 接口,并实现 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 定时任务执行中:" + LocalDateTime.now());
    }
}

3. 配置 Quartz 任务调度

Spring Boot 允许通过 SchedulerFactoryBean 配置 Quartz 任务,并使用 @Bean 方式定义任务的调度规则。

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();
    }

    // 定义触发器,使用 Cron 表达式
    @Bean
    public Trigger myJobTrigger() {
        return TriggerBuilder.newTrigger()
                .forJob(myJobDetail())
                .withIdentity("myQuartzTrigger") // 触发器名称
                .withSchedule(CronScheduleBuilder.cronSchedule("0 0/5 0-7 ? * * *")) // Cron 表达式
                .build();
    }
}

在上述配置中,我们的定时任务:

  • 每 5 分钟执行一次
  • 每天从 00:00 到 07:59 之间执行
  • 使用 Cron 表达式 0 0/5 0-7 ? * * *

如果需要 08:00 也执行一次,可以修改 Cron 表达式为:

0 0/5 0-8 ? * * *

4. 启动 Spring Boot 观察定时任务执行

启动 Spring Boot 项目,观察控制台输出:

Quartz 定时任务执行中:2024-03-19T00:00:00
Quartz 定时任务执行中:2024-03-19T00:05:00
Quartz 定时任务执行中:2024-03-19T00:10:00
...
Quartz 定时任务执行中:2024-03-19T07:55:00

如果 Cron 表达式修改为 0 0/5 0-8 ? * * *,则会多执行一次:

Quartz 定时任务执行中:2024-03-19T08:00:00

5. Quartz Cron 表达式详解

Quartz 的 Cron 表达式有 7 个字段,每个字段的含义如下:

字段允许值说明
秒(Seconds)0-59任务触发的秒数
分(Minutes)0-59任务触发的分钟数
小时(Hours)0-23任务触发的小时数
日期(Day of month)1-31任务触发的日期(不能与 Day of week 同时指定)
月份(Month)1-12 或 JAN-DEC任务触发的月份
星期(Day of week)1-7 或 SUN-SAT任务触发的星期几
年(可选)空 或 1970-2099任务触发的年份

示例 Cron 表达式

  • 0 0 12 * * ?每天中午 12:00 执行
  • 0 0/30 * * * ?每 30 分钟执行一次
  • 0 15 10 * * ?每天 10:15 执行
  • 0 0 8-20/2 * * ?每天 08:00 - 20:00 之间,每 2 小时执行一次

6. 结论

本篇文章介绍了如何在 Spring Boot 中集成 Quartz 进行定时任务调度,并通过 Cron 表达式 控制任务执行时间。Quartz 提供了更强大的任务调度能力,比 @Scheduled 注解更灵活,适用于复杂的定时任务需求。

你是否在项目中使用 Quartz?欢迎在评论区分享你的经验! 🚀

http://www.dtcms.com/a/82435.html

相关文章:

  • Qt窗口控件之对话框QDialog
  • 基线定位系统:长基线与超短基线的原理与应用
  • 归并排序的思路与实现
  • 【Vitis AIE】FPGA快速部署ConvNet 示例MNIST数据集
  • 植物来源药用天然产物的合成生物学研究进展-文献精读121
  • QT Quick(C++)跨平台应用程序项目实战教程 1 — 教程简介
  • python中所有内置类型
  • 一文了解 分布式训练
  • 开源ASR选择
  • 探索大模型的幻觉问题及其解决策略
  • FIT Framework 社区 v3.5.0-M1 版本发布
  • Copilot提示词库用法:调整自己想要的,记住常用的,分享该共用的
  • `docker commit`和`docker tag`
  • 各类神经网络学习:(三)RNN 循环神经网络(中集),同步多对多结构的详细解释
  • Nginx代理本机的443到本机的8080端口
  • 基于DeepSeek-R1 的RAG智能问答系统开发攻略
  • 数据结构之栈的2种实现方式(顺序栈+链栈,附带C语言完整实现源码)
  • 第一天 UnityShader的结构
  • 对敏捷研发的反思,是否真是灵丹妙药?
  • Linux 文件系统的日志模式与性能影响
  • Springboot整合Netty简单实现1对1聊天(vx小程序服务端)
  • 跨平台IPC通信、嵌入式WebRTC轻量化引擎:解析EasyRTC在ARM/Linux平台的性能突破
  • 深入了解 C# 中的 LINQ:功能、语法与应用解析
  • 【视频】m3u8相关操作
  • FRP安全机制与风险防范
  • 回溯-单词搜索
  • 刘强东突然发声:不该用算法压榨最底层兄弟!东哥,真正的人民企业家
  • 今日行情明日机会——20250321
  • CHM(ConcurrentHashMap)中的 sizeCtl 的作用与值变化详解
  • QT 图表(拆线图,栏状图,饼状图 ,动态图表)