SpringBoot 定时任务+Quartz

  • 1、分部解释
  • 2、整体代码

前言:

1、定时任务技术:

  • JDK 的 Timer, 定义多个定时任务,其中某个任务出现异常,当时整个定时任务终止。
  • Spring Task , 不支持 持久化与分布式部署,所有任务是单线程执行的
  • Quartz,支持持久化多线程执行。

2、Spring Boot 整合Quartz

  • Job: 任务。定时执行的具体任务内容
  • JobDetail: 任务详情。即与任务相关的其他配置信息
  • Trigger: 触发器,主要负责描述任务执行的时间规则
  • Scheduler: 调度器。
  • 将Job和Trigger整合起来之间的关系: Job:JobDetail->1:N JobDetail:Trigger->1:N Trigger:JobDetail->1:1
    在这里插入图片描述

3、引入pom文件:

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

4、创建执行任务,Job (自己的定时任务)

对应代码:

@Slf4j
@DisallowConcurrentExecution
@PersistJobDataAfterExecution
public class MyJob extends QuartzJobBean {@Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {System.out.println("任务开始执行");JobDetail jobDetail = context.getJobDetail();System.out.println("名字" + jobDetail.getKey().getName());System.out.println("类名--->" + jobDetail.getJobClass().getName());System.out.println("本次执行的时间为---》" + context.getFireTime());System.out.println("下次执行的时间为---》" + context.getNextFireTime());System.out.println("任务执行完毕");System.out.println("============================");}
} 

5、创建JobDtail 和 Trigger

在这里插入图片描述
在执行任务的类上添加注解。

  • PersistJobDataAfterExecution ,有状态的,在定时任务执行的Job中获取的JobExecutionContext 是同一个。比如在JobDetail 中,usingJobData(“count”,1);进行共享数据的初始化,如果不使用这个注解在执行任务上,会获取不同的JobExecutionContext 。
  • DisallowConcurrentExecution 在时间间隔内,如果本任务没有执行完成,下一个任务不会启动,一直到本任务结束。下一个任务才开始执行。

创建配置类:

在这里插入图片描述
解释:

持久化 .storeDurably() 。如果没有持久化,没有对应的触发器,失去执行的条件,存在没有意义,就会将其删除。
如果有持久化,没有对应的触发器,还是会保留 JobDetail。

对应代码:

@Configuration
public class QuartzConfiguration {//JobDetail@Bean(value = "jobDetail")public JobDetail jobDetail(){return JobBuilder.newJob(MyJob.class).storeDurably()//唯一标识.withIdentity("jobDetail").build();}@Bean// @Qualifier 引用指定的bean 的实例对象。public Trigger trigger(@Qualifier("jobDetail")JobDetail jobDetail){Trigger jobDetail1 = TriggerBuilder.newTrigger().forJob(jobDetail)//唯一标识和上面的JobDetail是配对的。.withIdentity("jobDetail")//这个表达式可以写到yml 中进行引用,这样以后更改直接改配置文件即可。//每两秒钟执行一次.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")).build();return jobDetail1;}}

6、cron表达式

在这里插入图片描述

tips:一般使用 六位,最后一位年 一般不使用。

整体代码实例演示:

pom文件

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

1、自己的定时任务Job

@Slf4j
@DisallowConcurrentExecution
@PersistJobDataAfterExecution
public class MyJob extends QuartzJobBean {@Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {System.out.println("任务开始执行");JobDetail jobDetail = context.getJobDetail();System.out.println("名字" + jobDetail.getKey().getName());System.out.println("类名--->" + jobDetail.getJobClass().getName());System.out.println("本次执行的时间为---》" + context.getFireTime());System.out.println("下次执行的时间为---》" + context.getNextFireTime());System.out.println("任务执行完毕");System.out.println("============================");}
} 

2、定时任务的配置类

@Configuration
public class QuartzConfiguration {//JobDetail@Bean(value = "jobDetail")public JobDetail jobDetail(){return JobBuilder.newJob(MyJob.class).storeDurably()//唯一标识.withIdentity("jobDetail").build();}@Bean//Triggerpublic Trigger trigger(@Qualifier("jobDetail")JobDetail jobDetail){Trigger jobDetail1 = TriggerBuilder.newTrigger().forJob(jobDetail)//唯一标识和上面的JobDetail是配对的。.withIdentity("jobDetail")//这个表达式可以写到yml 中进行引用,这样以后更改直接改配置文件即可。//每两秒钟执行一次.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")).build();return jobDetail1;}}

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

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

相关文章

Prism 入门01,基础

Prism 框架是支持多平台的一种MVVM框架(Model-View-ViewModel) 除了具备一些基础的属性通知绑定,命令操作,消息聚合器等功能外。还具备一些强大的功能:例如,区域,导航,会话服务,模块注入等特性。 一.如何在WPF 项目中使用Prism 框架 1.打开Visual Studio 2022,选择创…

【排序】选择排序(含优化版)

本章我们继续讲排序算法&#xff0c;这里我们将学习选择排序&#xff0c;也是一个很普遍很常见的排序算法&#xff0c;逻辑和代码都比较简单&#xff0c;比较容易掌握&#xff0c;我们直接走起 选择排序 基本思想&#xff1a;选择排序&#xff08;SelectSort&#xff09;&…

Layui2.5.6树形表格TreeTable使用

1、问题概述? Layui2.5.6的树形表格-TreeTable终于用明白了,步骤详细,提供源码下载。 如果你使用的是Layui2.8+版本,那么点个赞,赶紧去官网看吧,官网更行了。 更新地址:树表组件 treeTable - Layui 文档 最近在项目中需要使用到树形表格,用来显示菜单的层级关系,当…

辩证 逻辑学 | 洞察 事物矛盾及变化规律 在形式逻辑基础上 学会辩证思维(40节课)

课程下载&#xff1a;辩证逻辑学洞察事物矛盾及变化规律在形式逻辑基础上学会辩证思维&#xff08;40节课&#xff09;-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 在形式逻辑的基础上&#xff0c;学会 辩证思维 敏锐 洞察事物发展变化的规…

Linux命令篇(一):文件管理部分

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; 文章目录 1、cat命令常用参…

童趣盎然,米香四溢 —— 蒙自源六一儿童节特别献礼

充满欢声笑语的六一儿童节马上就要来了&#xff0c;在这个充满童真和喜悦的时刻&#xff0c;蒙自源米线品牌以一颗童心&#xff0c;为所有大朋友和小朋友准备了一份特别的礼物。 从5月25日开始&#xff0c;蒙自源诚挚邀请您和孩子们一同前往蒙自源旗下各大门店&#xff0c;品尝…

【MySQL数据库】MySQL 高可用搭建方案——MHA实战

MHA&#xff08;Master High Availability&#xff09; MHA实战 MHA&#xff08;Master High Availability&#xff09; 一、MHA简介二、MHA搭建准备要求&#xff1a;mha集群搭建&#xff0c;4台服务器&#xff0c;1主2从&#xff0c;1台mha2.1实验思路2.2实验准备 三、搭建MyS…

HTML5常用标签表格

04-08、表格标签table 概述 表格&#xff1a;是一种行和列组合而成的单元格。一般应用于后台网页设计管理数据使用。 表格的架构部分&#xff1a; tabletable head 表格头 theadtable body - 表格体 tbodytable foot -表格的页脚 tfoot 表格的基本组成部分&#xff1a; t…

opencv-python(三)

马赛克 face img[162:428,297:527] # 人脸坐标区域face face[::10,::10] # 每10个中取出一个像素&#xff0c;马赛克face np.repeat(face, 10, axis0) # 行方向重复10次face np.repeat(face, 10, axis1) # 列方向重复10次img[162:428,297:527] face[:266,:230] # 填充&a…

计算机科学与技术和软件工程专业有什么区别?应该怎么选?

计算机科学与技术和软件工程都是就业前景较好的计算机类专业&#xff0c;二者密切相关但侧重点不同&#xff0c;同学们应该如何选择呢&#xff1f; 一、学习内容 1.学科定位 ● 计算机科学与技术 侧重于计算机科学的理论研究和基础技术&#xff0c;包括算法、数据结构、人工…

lnmp平台部署web应用,安装Discuz社区平台详细文章——更新中

Nginx网站service 详细相关介绍-特点-http状态码-配置文件、将nginx添加永久环境变量 访问网站404是什么&#xff1f;_nginx 稳定版-CSDN博客文章浏览阅读1.2k次&#xff0c;点赞33次&#xff0c;收藏24次。开源Web服务器软件。_nginx 稳定版https://blog.csdn.net/2301_771619…

数据结构--数组(详细分析)

目录 &#x1f349;引言 &#x1f349;数组 &#x1f348;数组的特性 &#x1f348;数组的优缺点 &#x1f34d;优点&#xff1a; &#x1f34d;缺点&#xff1a; &#x1f348;数组的声明与初始化 &#x1f348;数组的常见操作 &#x1f34d; 插入操作 &#x1f34d;…

Touch Camera PRO 2024 Easy Mobile Desktop Camera Controller(触控相机专业版)

一个真正易于使用的移动+台式摄像机控制器,具有视角切换功能! Touch Camera PRO 是一款非常易于使用的移动+桌面相机控制器,具有透视切换功能!它在 Home Designer、Runtime Level Editor 和 Floor Map Designer 等其他插件中使用! 在桌面和移动设备上工作! 一个干…

WIireShark使用教程

文章目录 目录 文章目录 一.入门抓包示例 一.入门抓包示例 先介绍一下如何使用wireshark抓取相应网卡的流量&#xff0c;让读者可以先上手操作感受一下抓包的具体过程。 1.打开wireshark的主界面如下 2.选择需要抓包的网卡&#xff0c;鼠标左键双击&#xff0c;即可抓取该网…

Mysql常见问题总结

1、MySQL初始化报错 mysqld --initialize --usermysql --console 2024-06-02T15:52:22.645557Z 0 [System] [MY-013169] [Server] D:\installSoft\mysql-8.0.21-winx64\bin\mysqld.exe (mysqld 8.0.21) initializing of server in progress as process 8980 2024-06-02T15:52:2…

量子加速超级计算简介

本文转载自&#xff1a;量子加速超级计算简介(2024年 3月 13日) By Mark Wolf https://developer.nvidia.cn/zh-cn/blog/an-introduction-to-quantum-accelerated-supercomputing/ 文章目录 一、概述二、量子计算机的构建块&#xff1a;QPU 和量子位三、量子计算硬件和算法四、…

【IC验证】一文速通多通道数据整型器(MCDF)

目录 01 README 02 MCDF设计结构 2.1 功能描述 2.2 设计结构 2.3 接口与时序 2.3.1 系统信号接口 2.3.2 通道从端接口 2.3.3 整形器接口 2.3.4 控制寄存器接口 2.3.4.1 接口时序图 2.3.4.2 各数据位信息 03 验证框图 3.1 reg_pkg 3.1.1 reg_trans 3.1.2 reg_driv…

【一刷《剑指Offer》】面试题 27:二叉搜索树与双向链表

牛客对应题目链接&#xff1a;二叉搜索树与双向链表_牛客题霸_牛客网 (nowcoder.com) 力扣对应题目链接&#xff1a;LCR 155. 将二叉搜索树转化为排序的双向链表 - 力扣&#xff08;LeetCode&#xff09; 一、《剑指 Offer》对应内容 二、分析题目 上面力扣上的这道题目和牛客…

AGM DAP-LINK 离线烧录报错信息分析

DAP-LINK 支持离线烧录。 即&#xff1a;先把要烧录的bin 烧录到DAP-LINK 中&#xff1b;然后DAP-LINK 可以脱离PC&#xff0c;上电后通过按键对目标板进行烧录。 CMSIS-DAP模式 跳线JGND断开&#xff0c;状态LED D4快闪&#xff0c;D3常亮&#xff08;串口状态&#xff09;。…

接口设计的最佳实践-下篇

大多数程序员&#xff0c;做得最多的事&#xff0c;也不过是写接口这件事而已。 今天继续总结下接口设计需要注意的点。尽量每种都给出具体的场景、案例等&#xff0c;希望大家能有所收获。 1、接口幂等 幂等性&#xff1a;是指一个操作或者一个服务&#xff0c;无论执行多少…