• SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.14 SpringBoot 整合 quartz


    SpringBoot

    【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】

    SpringBoot 开发实用篇

    5 整合第三方技术

    5.14 SpringBoot 整合 quartz
    5.14.1 任务【定时任务

    【定时任务】

    • 定时任务是企业级应用中的常见操作
      • 年度报表
      • 缓存统计报告

    市面上流行的定时任务技术:【当时】

    • Quartz
    • Spring Task
    5.14.2 环境准备

    创建一个新的模块工程

    在这里插入图片描述

    依赖都不勾,自己加

    在这里插入图片描述

    直接创建,上来先把SpringBoot 的版本改掉

    在这里插入图片描述

    OK,一个全新的 SpringBoot 工程

    5.14.3 Java 中的定时任务

    新建一个类

    package com.dingjiaxiong;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    /**
     * ClassName: TimerTaskApp
     * date: 2022/10/22 13:19
     *
     * @author DingJiaxiong
     */
    
    public class TimerTaskApp {
        public static void main(String[] args) {
            Timer timer = new Timer();
            TimerTask task = new TimerTask() {
                @Override
                public void run() {
                    System.out.println("Timer task run...");
                }
            };
    
            timer.schedule(task,0,2000); //当前程序启动后立即执行,每2s执行一次
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    直接运行

    在这里插入图片描述

    效果很明显

    【这就是Java 内部的实现方式】【但是毕竟还是不专业】

    这就催致了 Quartz 和 Spring Task的出现

    5.14.4 SpringBoot 整合 Quartz

    【相关概念】

    • 工作(Job):用于定义具体执行的工作【要干的事儿】
    • 工作明细(JobDetail):用于描述定时工作相关的信息【事儿的明细】
    • 触发器(Trigger):用于描述触发工作的规则,通常使用cron表达式定义调度规则
    • 调度器(Scheduler):描述了工作明细与触发器的对应关系【绑定】

    【导入坐标】

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-quartzartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    【创建工作】

    package com.dingjiaxiong.quartz;
    
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.springframework.scheduling.quartz.QuartzJobBean;
    
    /**
     * ClassName: MyQuartz
     * date: 2022/10/22 13:42
     *
     * @author DingJiaxiong
     */
    
    public class MyQuartz extends QuartzJobBean {
    
        //实现抽象方法
        @Override
        protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
            //编写具体要干的事儿
            System.out.println("Quartz task run...");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    这就是一个普通的Java 对象

    【进行配置】

    创建配置类

    package com.dingjiaxiong.config;
    
    import com.dingjiaxiong.quartz.MyQuartz;
    import org.quartz.*;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * ClassName: QuartzConfig
     * date: 2022/10/22 13:46
     *
     * @author DingJiaxiong
     */
    
    @Configuration
    public class QuartzConfig {
    
        //打印工作的明细
        @Bean
        public JobDetail printJobDetail(){
            //绑定具体的工作
            return JobBuilder.newJob(MyQuartz.class).storeDurably().build();
        }
    
        //触发器
        @Bean
        public Trigger printJobTrigger(){
            //绑定对应的工作明细
            ScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/5 * * * * ?"); //从0秒开始,每5s执行一次
            return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(scheduleBuilder).build();
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    这样就OK了,当我们启动服务器,加载到这个配置类,定时任务就开始了

    直接运行!

    在这里插入图片描述

    OK, 每隔5s 打印一次,为了效果明显,笔者改下,每秒钟打印一次

    在这里插入图片描述

    OK, 这样就很明显了

    【简单的整合就是这样】

    回顾一下

    • 导入SpringBoot整合quartz的坐标

    在这里插入图片描述

    • 定义具体要执行的任务,继承QuartzJobBean

    在这里插入图片描述

    • 定义工作明细与触发器,并绑定对应关系

    在这里插入图片描述

    5.14.5 小结
    1. SpringBoot整合Quartz
    • 工作(Job)
    • 工作明细(JobDetail)
    • 触发器(Trigger)
    • 调度器(Scheduler

    【可以感觉到还是很麻烦啊,能不能简化?】

  • 相关阅读:
    如何远程访问电脑?
    ES 查询语法-详解
    前端工作经验总结以及技术分享
    MySQL事务、索引、数据恢复和备份
    std::string_view概念原理及应用
    测试流程||功能测试
    深度自定义mybatis
    [BJDCTF 2020]Easy
    开始使用 ELEMENTOR
    【论文极速读】IMAGEBIND —— 通过图片作为桥梁桥联多模态语义
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/127976022