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

发布时间:2024年01月23日

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

1、什么是Quartz

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

大部分公司都会用到定时任务这个功能。
拿火车票购票来说,当你下单后,后台就会插入一条待支付的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 {
    @Bean
    public MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean(IcanJobDemo icanJobDemo){
        MethodInvokingJobDetailFactoryBean JobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean();
        JobDetailFactoryBean.setTargetMethod("printTime");
        JobDetailFactoryBean.setTargetObject(icanJobDemo);
        return JobDetailFactoryBean;
    }

    @Bean
    public CronTriggerFactoryBean cronTriggerFactoryBean(MethodInvokingJobDetailFactoryBean jobDetailFactoryBean){
        CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();
        cronTriggerFactoryBean.setCronExpression("*/1 * * * * ?");
        cronTriggerFactoryBean.setJobDetail(jobDetailFactoryBean.getObject());
        return cronTriggerFactoryBean;
    }

    @Bean
    public 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、运行启动类查看控制台

在这里插入图片描述

文章来源:https://blog.csdn.net/qq_62124267/article/details/135768259
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。