当前位置: 首页 > article >正文

springboot整合Quartz实现定时任务

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 1.核心概念
  • 2.基础实现
    • 2.1引入依赖
    • 2.2创建具体逻辑类
    • 2.3配置类
  • 总结


前言

在项目中我们会有许多要进行定时执行逻辑的业务场景,比如定期生成日报、定期发送通知等。在遇到这些场景时,使用Quartz框架可以快速的完成功能。


1.核心概念

Job:任务。定时执行的具体任务内容
JobDetail:任务详情。即与任务相关的其他配置信息
Trigger:触发器,主要负责描述任务执行的时间规则(特定时间频率或者时间点)
Scheduler:调度器。将Job和Trigger整合起来
在这里插入图片描述

2.基础实现

2.1引入依赖

在这里插入图片描述

2.2创建具体逻辑类

我们需要编写实现具体逻辑的类,这个类要么实现Job接口,要么继承QuartzJobBean类
这里我们使用第一种
在这里插入图片描述
在Job实现类上,我们有两个可用注解:

  • @PersistJobDataAfterExecution:有状态的job。在执行过程中,每次执行定时任务都会创建一个新的JobDetail对象,其中的用于存储共享数据的Map集合也只会存储初始化的数据,如果每次定时任务中需要使用并修改里面的数据并保留修改结果,则需要添加此注解。
  • @DisallowConcurrentExecution:禁止并发访问同一个job定义。定时任务中有时可能出现以下情况——任务执行时间比周期时间更长,就是说上一次任务还没执行完就到了下一次任务的执行时间了,形成并发的局面。使用此注解可以让当前定时任务即使到时间后也要等待上一次任务完成才执行。

2.3配置类

我们现在有了Job类,现在我们要在一个配置类中提供JobDetail和Trigger并为三者绑定关系。
在定义jobDetail时可用使用usingJobData()方法来向其中的Map集合存入数据:
在这里插入图片描述
这里我们在提供Trigger对象时可以定义日期表达式,来决定任务执行的时间和频率。并且与依赖中提供的默认schedule绑定。
在这里插入图片描述
日期表达式是一个字符串,具体规则如下:
cron表达式
表达式格式(7个字段):秒 分 时 日 月 星期几 年,例如:0 0 13 24 1 ?2024
特殊符号
*可以理解为每的意思,每秒、每分、每天、每回、每年
?问号只能出现在日和星期这两个位置,表示这个位置的值不确定
-减号表示一个范围。例如:小时字段10-12,代表10到12点之间
,逗号表示一个列表。例如:星期字段1,3,5代表周一、周三、周五三天
/斜杠表示频率。例如:秒字段0/15就是从0秒开始,每隔15秒执行一次

接下来,我们已经有了job对象,jobdetail对象,trigger对象。
据一开始的介绍,我们的结构中应该还有一个调度器(Scheduler),这个对象并不要求一定要手动创建,spring中会默认提供一个调度器对象。后面要实现动态调度或者多任务执行时候才会自己手动创建调度器对象。
所以,至此,简单的定时任务的配置流程已经完成了。


总结

本文讲解了如何使用Quartz来开启一个简单的定时任务。


http://www.kler.cn/a/466295.html

相关文章:

  • Prism模块化
  • 【Rust自学】9.4. 什么时候该使用panic!
  • 【网络安全 | 漏洞挖掘】JS Review + GraphQL滥用实现管理面板访问
  • 【网络安全 | 漏洞挖掘】绕过电子邮件确认实现预账户接管
  • Pycharm连接远程解释器
  • IEEE PDF eXpress遇到Font TimesNewRomanPSMT is not embedded的解决方案
  • 趣味编程:心形曲线
  • Linux环境(CentOs7) 安装 Node环境
  • 最近学习shader的一些总结
  • npm ERR! ECONNRESET 解决方法
  • Celeborn Spark 集成最新进展
  • 滤波器的主要参数
  • Flutter路由钩子
  • 1月2日作业
  • 酒店管理系统|Java|SSM|VUE| 前后端分离
  • [文献阅读] Reducing the Dimensionality of Data with Neural Networks
  • 查找最长回文子串
  • 七种改进爬山算法的方法
  • 阿里巴巴Java 面试突击手册开源(涵盖 p5-p8 技术栈)
  • 数据结构排序
  • C. Line: 用扩展欧几里得算法求解整数解
  • 京东一面:MySQL 主备延迟有哪些坑?主备切换策略
  • TypyScript从入门到精通
  • 如何根据数据分布特性,选择合适的聚类算法,以优化K-Means算法对非球形分布数据的聚类效果?
  • 3blue1brow线代笔记
  • 使用 HEIC/HEIF 编码器将 HEIC 转换为 JPEG