定时任务组件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、运行启动类查看控制台
