当前位置: 代码网 > it编程>编程语言>Java > Spring Boot 集成 Quartz 使用Cron 表达式实现定时任务

Spring Boot 集成 Quartz 使用Cron 表达式实现定时任务

2025年03月22日 Java 我要评论
前言在 spring boot 项目中,我们经常需要定时执行某些任务,例如定期清理数据库、同步数据、发送通知等。quartz 是一个强大的任务调度框架,可以通过 cron 表达式 实现灵活的任务调度。

前言

在 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?欢迎在评论区分享你的经验! 🚀

到此这篇关于spring boot 集成 quartz 实现定时任务(cron 表达式示例)的文章就介绍到这了,更多相关spring boot quartz 定时任务内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com