springBoot整合quartz定时任务

news2024/9/22 13:33:22

声明

Quartz是一种基于java实现的任务调度框架,可以定时自动的执行你想要执行的任何任务。

官网:quartz官网

利用Quartz的定时任务技术可以应用于许多不同的场景,帮助我们实现定时执行任务、数据清理、缓存刷新、邮件发送、数据备份、系统监控与报警、数据分析和报表生成等功能。这些场景都需要定期执行一些重复性或后台的任务,Quartz能够提供灵活而可靠的定时任务调度功能,帮助我们简化开发和管理。

概念

quartz有四大核心概念,分别为:

1 工作(Job )做什么事?:用于定义具体执行的工作,通常写业务处理的地方。
2 工作明细(JobDetail):用于描述定时工作相关的信息
3 触发器(Trigger):用于描述触发工作的规则,通常使用corn表达式定义调度规则
4 工作调度器(Scheduler):描述了工作明细与触发器的对应关系 (什么时候去做?)

一个job可以给多个jobDetail封装,一个jobDetail可以给trigger来配置规则,但是一个trigger只能装配一个jobDetail

引入依赖

直接在pom里面引入依赖

 <!--  quartz定时任务      -->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-quartz</artifactId>
      <version>2.3.2.RELEASE</version>
  </dependency>

引入完之后,哪怕什么也不写,重启项目的时候就会发现控制台已经有quartz相关的日志了

在这里插入图片描述

创建Job

创建一个job类用来定义任务逻辑

在这里面有2个点需要注意
1 该类要继承extends QuartzJobBean抽象类
2 继承完后要实现executeInternal方法,在该方法里面编写逻辑

在这里插入图片描述

代码如下:

package com.quartz.job;

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

/**
 * @description: quartz定时任务
 * @author: wyh
 * @date: 2023-11-22 10:04
 **/

/**
 * 1.创建定时任务类 继承QuartzJobBean抽象类,实现其抽象方法executeInternal,在此方法指定具体业务
**/
public class MyQuartzJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) {
        // 业务处理
        System.out.println("Quartz running....");
    }
}

创建QuartzConfig

创建quartz定时任务配置类,在该类里面有两个地方需要处理,分别是任务明细的构造和触发器的构造

该类有3个地方需要注意
1 类不要忘了加@Configuration注解,不然不生效
2 方法上不要忘了加@Bean注解,不然不生效
3 JobBuilder.newJob制定的是具体工作的类
4 TriggerBuilder.newTrigger().forJob制定的是具体明细的方法名,不要忘了加括号,当然不加编译也会报错。

在这里插入图片描述

绑定工作任务并构造任务明细

通过JobDetail绑定对应的job任务

   /**
     * 绑定工作明细
     **/
    @Bean
    public JobDetail jobDetail(){
        // 绑定具体的任务类并调用storeDurably进行持久化,最后build构建 newJob中的参数就是具体的工作类
        return JobBuilder.newJob(MyQuartzJob.class).storeDurably().build();
    }

设置触发频率并构造触发器

通过cron表达式配置执行频率,然后指定工作明细

任务的触发,触发器有SimpleTrigger,CronTrigger,DateIntervalTrigger和NthIncludedDayTrigger四种类型,其中SimpleTrigger:能够周期性的设置任务触发;CronTrigger:使用cron表达式的方式实现任务触发,实现更多样,使用场景也是最多的。

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

标题

   /**
     * 创建触发器
     **/
    @Bean
    public Trigger quartzTrigger(){
       // 设置触发频率 参数: 秒 分 时 日 月 星期几(0/x表示x秒执行一次)
        ScheduleBuilder<CronTrigger> scheduleBuilder = CronScheduleBuilder.cronSchedule("0/1 * * * * ?");
        // 创建触发器并绑定对应的工作明细和频率  forJob指定的是具体的方法名,withSchedule就是上面设置的频率
        return  TriggerBuilder.newTrigger().forJob(jobDetail()).withSchedule(scheduleBuilder).build();
    }

完整代码如下:

package com.quartz.config;

import com.quartz.job.MyQuartzJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @description: quartz定时任务配置类
 * @author: wyh
 * @date: 2023-11-22 10:08
 **/

@Configuration
public class QuartzConfig {
    /**
     * 2.绑定工作明细
     **/
    @Bean
    public JobDetail jobDetail(){
        // 绑定具体的任务类并调用storeDurably进行持久化,最后build构建 newJob中的参数就是具体的工作类
        return JobBuilder.newJob(MyQuartzJob.class).storeDurably().build();
    }
    /**
     * 3.创建触发器
     **/
    @Bean
    public Trigger quartzTrigger(){
       // 设置触发频率 参数: 秒 分 时 日 月 星期几(0/x表示x秒执行一次)
        ScheduleBuilder<CronTrigger> scheduleBuilder = CronScheduleBuilder.cronSchedule("0/1 * * * * ?");
        // 创建触发器并绑定对应的工作明细和频率  forJob指定的是具体的方法名,withSchedule就是上面设置的频率
        return  TriggerBuilder.newTrigger().forJob(jobDetail()).withSchedule(scheduleBuilder).build();
    }
}

查看效果

启动项目,查看结果。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1237806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytest-base-url插件之配置可选的项目系统URL

前言 ①当我们的自动化代码完成之后&#xff0c;通常期望可以在不同的环境进行测试&#xff0c;此时可以将项目系统的URL单独拿出来&#xff0c;并且可以通过pytest.ini配置文件和支持pytest命令行方式执行。 ② pytest-base-url 是一个简单的pytest插件&#xff0c;它通过命…

uniapp - 开关按钮

目录 1.运行代码如下&#xff1a; 2.运行效果 3.switch属性 1.运行代码如下&#xff1a; <template><view class"switchBox"><switch change"switchChange" color"#F21177" :checked"form.checked" /></view&…

【人生苦短,我学 Python】(1)初识 Python

目录 1. 简述2. 什么是 Python&#xff1f;3. 面向对象简述3.1 面向过程3.2 面向对象3.3 面向对象的主要优点3.4 面向对象的基本概念3.5 面向对象程序设计 4. Python语言的版本和解释器5. Python 编程工具6. Python 的三种编程方式7. 简单的 Python 程序8. 高级一点的 Python 程…

HashMap知识点总结

文章目录 HashMapConcurrentHashMap线程安全问题 HashMap 1、null作为key只能有一个&#xff0c;作为value可以有多个 2、容量&#xff1a; 1.7&#xff1a;默认161.8&#xff1a;初始化并未指定容量大小&#xff0c;第一次put才初始化容量 3、负载因子 默认0.75&#xff0…

LeetCode算法心得——爬楼梯(记忆化搜索+dp)

大家好&#xff0c;我是晴天学长&#xff0c;第二个记忆化搜索练习&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1&#xff09;爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或…

目标检测原理

一、什么是目标检测 目标检测的任务是找出图像中所有感兴趣的目标&#xff08;物体&#xff09;&#xff0c;确定他们的类别和位置&#xff0c;是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状、姿态&#xff0c;再加上光照、遮挡等因素的干扰&#xff0c;目…

枚举 蓝桥oj 小蓝和小桥的挑战

题目 分析 用一个postiveSum记录所有正数的和&#xff0c;一个negativeSum记录所有负数的和&#xff0c;一个zeroNums记录0的数量&#xff0c;count表示加1的数量 所有的0必须算在加1的数量里面&#xff0c;否则积必然为0 将所有0加1后加入positiveSum中&#xff0c;再比较正数…

基于springboot实现在线外卖平台系统项目【项目源码】

基于springboot实现在线外卖平台管理系统演示 Java技术 Java是由SUN公司推出&#xff0c;该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称&#xff0c;也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的…

使用hping3和wrk模拟泛洪

一、hping3 1、syn随机ip泛洪 hping3 --flood -S --rand-source -p 端口 目标ip hping3 -c 10000 -d 120 -S -p 80 --flood --rand-source 192.168.112.130​说明&#xff1a; -c 100000 packets 发送的数量 -d 120 packet的大小 -S 只发送syn packets -p 80 目标端口&am…

前端js调取摄像头并实现拍照功能

前言 最近接到的一个需求十分有意思&#xff0c;设计整体实现了前端仿 微信扫一扫 的功能。整理了一下思路&#xff0c;做一个分享。 tips: 如果想要实现完整扫一扫的功能&#xff0c;你需要掌握一些前置知识&#xff0c;这次我们先讲如何实现拍照并且保存的功能。 一. windo…

Redis篇---第十四篇

系列文章目录 文章目录 系列文章目录前言一、为什么Redis的操作是原子性的,怎么保证原子性的?二、了解Redis的事务吗?四、Redis 的数据类型及使用场景前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男…

windows11记事本应用程序无法打开,未响应,崩溃,卡死

windows11记事本应用程序无法打开&#xff0c;未响应&#xff0c;崩溃&#xff0c;卡死 文章目录 问题描述搜索引擎&#xff08;度娘&#xff09;卸载后如何安装问题未解决另一个解决方案&#xff1a;步骤&#xff1a;1.设置 → 语音和区域 → 输入2.选择“高级键盘设置”3.替…

计数排序java实现

计数排序假设n个输入元素中的每一个都是在0到k区间的一个整数&#xff0c;其中k为某个整数&#xff0c;当kO(n)时&#xff0c;排序的运行时间为θ(n)。 计数排序的基本思想是&#xff1a;对每一个输入元素x&#xff0c;确定小于x的元素个数。利用这一信息&#xff0c;就可以直…

LeetCode:2304. 网格中的最小路径代价(C++)

目录 2304. 网格中的最小路径代价 题目描述&#xff1a; 实现代码&#xff1a; dp&#xff08;dp有很多相似的经典题目&#xff0c;比较简单&#xff0c;不再给出解析&#xff09; 2304. 网格中的最小路径代价 题目描述&#xff1a; 给你一个下标从 0 开始的整数矩阵 grid …

神经网络常用激活函数详解

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

C++:AVL树(平衡二叉树)

引言&#xff1a; AVL树是一种特殊的二叉搜索树&#xff0c;二叉搜索树虽然可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Ade…

揭秘成都瀚网科技有限公司:抖音带货是否靠谱?

随着抖音等短视频平台的兴起&#xff0c;越来越多的商家和网红开始利用这些平台进行带货销售。这其中&#xff0c;成都瀚网科技有限公司&#xff08;以下简称瀚网科技&#xff09;也宣称能够在抖音等平台上实现带货销售&#xff0c;那么这家公司是否靠谱呢&#xff1f;本文将为…

外贸自建站的指南?新手如何玩转海洋建站?

外贸自建站工具有哪些&#xff1f;外贸新手怎么搭建独立网站&#xff1f; 拥有自己的外贸网站是提高企业国际竞争力和扩大市场份额的有效途径。然而&#xff0c;许多企业在外贸自建站的过程中感到困惑。海洋建站将为您提供一份详细的外贸自建站指南&#xff0c;助您轻松打造一…

数据库实验二 数据库表的数据插入、修改、删除操作

数据库实验二 数据库表的数据插入、修改、删除操作 一、实验目的二、设计性实验三、观察与思考 一、实验目的 1&#xff0e;掌握MySQL数据库表的数据插入、修改、删除操作SQL语法格式 2&#xff0e;掌握数据表的数据的录入、增加和删除的方法 二、设计性实验 某超市的食品管…

Oracle(2-5)Usage and Configuration of the Oracle Shared Server

文章目录 一、基础知识1、 Server Configurations服务器配置2、Dedicated server process专用服务器进程3、Oracle Shared ServerOracle共享服务器4、Benefits of Shared Server 共享服务器的优点5、Processing a Request 处理请求6、Configuring Shared Server 配置共享服务器…