当前位置: 代码网 > it编程>编程语言>Java > SpringBoot3整合Quartz实现定时任务的示例

SpringBoot3整合Quartz实现定时任务的示例

2024年11月18日 Java 我要评论
1. 什么是 quartz scheduler?quartz 是 java 平台下的一个强大、灵活的调度库,它支持复杂的任务调度,包括:简单的任务:按固定频率或延迟执行任务。基于 cron 表达式的任

1. 什么是 quartz scheduler?

quartz 是 java 平台下的一个强大、灵活的调度库,它支持复杂的任务调度,包括:

  • 简单的任务:按固定频率或延迟执行任务。
  • 基于 cron 表达式的任务:支持类似于 linux cron 的表达式,用于定义复杂的定时任务。
  • 持久化任务:支持将任务数据持久化存储,以便在应用程序重启后可以恢复任务状态。

2. spring boot 3 集成 quartz scheduler 的优势

  • 无缝集成:通过 spring boot 3 的自动配置特性,无需编写复杂的配置即可使用 quartz。
  • 灵活管理:支持任务的动态添加、暂停、恢复和删除。
  • 扩展性:可以轻松扩展任务调度系统,便于业务逻辑的复杂应用。

3. spring boot 3 集成 quartz 的步骤

3.1 创建 spring boot 项目

可以使用 spring initializr 创建项目,选择以下依赖:

  • spring web
  • quartz scheduler

3.2 添加 quartz 依赖

如果使用的是手动创建的项目,可以在 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 的基本属性,例如任务存储和调度方式。

以下是 application.yml 配置示例:

spring:
  application:
    name: spring-boot3-19-quartz
  quartz:
    job-store-type: memory  # 储类型为内存存储
    properties:
      org:
        quartz:
          threadpool:
            threadcount: 5  # 配置线程池线程数为 5
          jobstore:
            misfirethreshold: 60000  # 设置作业存储的错过触发阈值为 60000 毫秒(1分钟)

这里使用了内存存储方式(job-store-type: memory),也可以根据需要配置数据库存储任务信息。

3.4 创建一个 quartz 任务类

创建一个简单的 quartz 任务类,需要实现 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 配置任务调度器

在 spring boot 3 中,可以通过 @configuration 创建 quartz 的调度器,并配置定时任务的触发器(trigger)和任务详情(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 秒执行一次
                .repeatforever();

        return triggerbuilder.newtrigger()
                .forjob(samplejobdetail())
                .withidentity("samplejobtrigger")
                .withschedule(schedulebuilder)
                .build();
    }
}
  • samplejobdetail 方法定义了任务的基本信息,包括任务类和名称。
  • samplejobtrigger 方法定义了触发器的调度策略,这里设置为每 10 秒执行一次。

3.6 使用 cron 表达式配置任务

除了简单的时间间隔,还可以通过 cron 表达式实现更灵活的调度。以下示例展示如何使用 cron 表达式配置任务触发器。

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 * ? *"))  // 每分钟执行一次
            .build();
}

在这个例子中,cron 表达式 "0 0/1 * 1/1 * ? *" 表示每分钟执行一次任务。

4. 运行应用并查看日志

配置完成后,启动 spring boot 应用。quartz scheduler 会按照配置执行 samplejob 任务。您可以在控制台中看到日志输出,类似如下:

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 秒执行一次效果:

每分钟执行一次效果:

5. 动态管理 quartz 任务

可以在代码中动态地添加、暂停、恢复和删除任务。例如,以下是动态添加任务的示例:

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

调用 schedulejob 方法可以动态地添加新的任务。类似地,使用 scheduler.pausejob() 和 scheduler.deletejob() 可以暂停或删除任务。

6. 总结

通过将 quartz 与 spring boot 3 结合,我们可以实现强大而灵活的定时任务调度系统。本文介绍了 quartz 的基本配置和使用方法,包括如何配置任务、触发器,以及使用 cron 表达式实现复杂的调度策略。

以上就是springboot3整合quartz实现定时任务的示例的详细内容,更多关于springboot3 quartz定时任务的资料请关注代码网其它相关文章!

(0)

相关文章:

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

发表评论

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