ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

定时任务组件Quartz和CronTrigger的介绍和整合SpringBoot项目实例

2026/9/29 3:16:21 拓冰建站 浏览量
定时任务组件Quartz和CronTrigger的介绍和整合SpringBoot项目实例

定时任务组件Quartz和CronTrigger的介绍和整合SpringBoot项目实例

1、什么是Quartz

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能:

  • 持久性作业 - 就是保持调度定时的状态;
  • 作业管理 - 对调度作业进行有效的管理;
    Quartz官网:http://www.quartz-scheduler.org/

大部分公司都会用到定时任务这个功能。
拿火车票购票来说,当你下单后,后台就会插入一条待支付的task(job),一般是30分钟,超过10min后就会执行这个job,去判断你是否支付,未支付就会取消此次订单;当你支付完成之后,后台拿到支付回调后就会再插入一条待消费的task(job),Job触发日期为火车票上的出发日期,超过这个时间就会执行这个job,判断是否使用等。

在我们实际的项目中,当Job过多的时候,肯定不能人工去操作,这时候就需要一个任务调度框架,帮我们自动去执行这些程序。那么该如何实现这个功能呢?

我们需要定义实现一个定时功能的接口,我们可以称之为Task(或Job),如定时发送邮件的task(Job),重启机器的task(Job),优惠券到期发送短信提醒的task(Job)

2、Quartz框架的使用思路

  • 1)job - 任务 - 你要做什么事?
  • 2)Trigger - 触发器 - 你什么时候去做?
  • 3)Scheduler - 任务调度 - 你什么时候需要去做什么事?
    在这里插入图片描述

3、SpringBoot整合Quartz框架

3.1、添加Quartz依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

3.2、自定义一个Job

@Component
public class IcanJobDemo {public void printTime() {System.out.println("现在时刻:"+new Date());}}

3.3、编写quartz配置类

/** Copyright (c) 2020, 2024, fpl1116.cn All rights reserved.**/
package cn.fpl.config;import cn.fpl.job.IcanJobDemo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;/*** <p>Project: ICan_ParentWork - QuartzConfig</p>* <p>Powered by fpl1116 On 2024-01-23 09:54:39</p>* <p>描述:<p>** @author penglei* @version 1.0* @since 1.8*/
@Configuration
public class QuartzConfig {@Beanpublic MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean(IcanJobDemo icanJobDemo){MethodInvokingJobDetailFactoryBean JobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean();JobDetailFactoryBean.setTargetMethod("printTime");JobDetailFactoryBean.setTargetObject(icanJobDemo);return JobDetailFactoryBean;}@Beanpublic CronTriggerFactoryBean cronTriggerFactoryBean(MethodInvokingJobDetailFactoryBean jobDetailFactoryBean){CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();cronTriggerFactoryBean.setCronExpression("*/1 * * * * ?");cronTriggerFactoryBean.setJobDetail(jobDetailFactoryBean.getObject());return cronTriggerFactoryBean;}@Beanpublic SchedulerFactoryBean schedulerFactoryBean(CronTriggerFactoryBean cronTriggerFactoryBean){SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();schedulerFactoryBean.setTriggers(cronTriggerFactoryBean.getObject());return schedulerFactoryBean;}}

3.4、编写启动类

@SpringBootApplication
public class IcanJobApp {public static void main(String[] args) {SpringApplication.run(IcanJobApp.class,args);}
}

3.5、运行启动类查看控制台

在这里插入图片描述