springboot整合quartz


想要定时或周期性的执行一些任务(比如:定时清除系统的缓存;信用卡每月25号自动扣款;再或者每天12点从网址扒拉一些每日更新的爱情动作片…),quartz 就是干这种事情的( quartz :别污蔑我)。没有其他的定时任务方案了吗?有, quartz 功能更加强大。
1、TimerTask (jdk 自带)
2、ScheduledExecutorService (基于线程池设计,jdk 自带)
3、Spring Task(spring 3.0 自带)
4、quartz(最横的一个)

本篇目的:了解 quartz 和与 springboot 的集成

一、quartz 组件

先参考一个 spring 基于 xml 形式配置 quartz 的示例,看明白他基本就差不多了
在这里插入图片描述

1、Job 任务

我们要定时执行某件事情,然后我们把它写成一个 java 类,这就是 Job

2、JobDetail 任务详情

具体任务类有了,还需要任务详情类( JobDetail )去构建 Job。一个任务详情对应一个任务,自古牛逼多反射。

3、Trigger 触发器

你把任务放进去了,什么时候执行?这就是触发器的作用。它根据你 cron 表达式的时间去触发任务详情。一个触发器对应一个任务详情。

4、Scheduler 调度器

调度器可以调度多个调度器,也就是可以调度多个任务。

二、springboot 集成 quartz

1、配置文件 pom.xml

在 pom.xml 中加入相关依赖:

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

2、开发

1)、编写 Job 任务类
——DownloadJob.java

package com;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DownloadJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        String time = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
        System.out.println(time + "===> 正在下载最新更新的爱情动作片...");
    }
}

2)、编写 quartz 配置类
该配置类配置 JobDetail 、Trigger(Scheduler)
——QuartzConfig.java

package com;

import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QuartzConfig {
    //构建 JobDetail
    @Bean
    public JobDetail downloadDetail() {
        return JobBuilder.newJob(DownloadJob.class) //具体任务类
                //给 JobDetail 起一个 id, 不写也会自动生成唯一的 TriggerKey
                .withIdentity("downloadJobDetail")
                //JobDetail 内部的一个 map, 可以存储有关 Job 的数据, 这里的数据
                // 可通过 Job 类中executeInternal方法的参数进行获取
                .usingJobData("job_download","download movie")
                .storeDurably()  //即使没有Trigger关联时也不删除该Jobdetail
                .build();
    }
    //构建 Trigger 及 Scheduler
    @Bean
    public Trigger downloadTrigger() {
        return TriggerBuilder.newTrigger()
                .forJob(downloadDetail())  //关联上面的 jobDetail
                .withIdentity("downloadTrigger")
                .usingJobData("trigger_download","download")
                //cron 表达式设置每隔 5 秒执行一次
                .withSchedule(CronScheduleBuilder.cronSchedule("*/5 * * * * ? *"))
                .build();
    }
}

3)、测试
启动测试类观察控制台输出即可看到结果
在这里插入图片描述
这有的撸友就郁闷了,这 cron 表达式怎么搞?莫急

cron 表达式在线生成:在线 cron 表达式生成器

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太上码农

有用的话就支持下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值