springboot整合quartz

文章目录

  • 一、quartz 组件
    • 1、Job 任务
    • 2、JobDetail 任务详情
    • 3、Trigger 触发器
    • 4、Scheduler 调度器
  • 二、springboot 集成 quartz
    • 1、配置文件 pom.xml
    • 2、开发

想要定时或周期性的执行一些任务(比如:定时清除系统的缓存;信用卡每月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 的示例,看明白他基本就差不多了
springboot整合quartz_第1张图片

1、Job 任务

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

2、JobDetail 任务详情

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

3、Trigger 触发器

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

4、Scheduler 调度器

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

二、springboot 集成 quartz

1、配置文件 pom.xml

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

	<dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-quartzartifactId>
    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)、测试
启动测试类观察控制台输出即可看到结果
springboot整合quartz_第2张图片
这有的撸友就郁闷了,这 cron 表达式怎么搞?莫急

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

你可能感兴趣的:(springboot,系列,quartz,spring,boot,java,spring)