SpringBoot的Quartz实现动态配置的定时任务

本文深入解析Quartz作业调度框架的核心概念与应用,Quartz是一个由Java编写的开源作业调度框架,支持作业和触发器的多对多关系,允许程序开发人员按时间间隔调度作业。文中详细介绍了Job、JobDetail、Trigger和Scheduler等关键组件,并通过示例展示了如何使用Spring配置定时任务。

一、Quartz简介

了解Quartz

  • Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。
  • Quartz 允许程序开发人员根据时间的间隔来调度作业。 Quartz
  • 实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。

Quartz 核心概念

  • Job 表示一个工作,要执行的具体内容。此接口中只有一个方法,如下:void execute(JobExecutionContext
    context)
  • JobDetail 表示一个具体的可执行的调度程序,Job 是这个可执行程调度程序所要执行的内容,另外 JobDetail还包含了这个任务调度的方案和策略。
  • Trigger 代表一个调度参数的配置,什么时候去调。
  • Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当 Trigger 与
    JobDetail 组合,就可以被 Scheduler 容器调度了。

应用:

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;

import com.ftf.doc.process.task.DocumentProcessCallbackJob;
import com.ftf.doc.process.task.DocumentProcessJob;

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail documentProcessJobDetail() {
        return JobBuilder.newJob(DocumentProcessJob.class).withIdentity("documentProcessJob", "doc").storeDurably()
                        .build();
    }

    @Bean
    public Trigger documentProcessJobTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2 * 60) // 每2分执行一次
                        .repeatForever(); // 永久重复,一直执行下去
        return TriggerBuilder.newTrigger().forJob(documentProcessJobDetail()).withSchedule(scheduleBuilder).build();
    }

    @Bean
    public JobDetail documentProcessCallbackJobDetail() {
        return JobBuilder.newJob(DocumentProcessCallbackJob.class).withIdentity("documentProcessCallback", "doc")
                        .storeDurably().build();
    }

    @Bean
    public Trigger documentProcessCallbackJobTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2 * 60) // 每2分执行一次
                        .repeatForever(); // 永久重复,一直执行下去
        return TriggerBuilder.newTrigger().forJob(documentProcessCallbackJobDetail()).withSchedule(scheduleBuilder)
                        .build();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值