Quartz介绍

news2024/11/27 6:35:44

一、前言

几乎所有系统都需要定时任务,如果系统中定时任务比较少并且是单机环境的直接使用SpringTask即可,如果定时任务比较多且需要经常维护或者要部署在分布式环境中就要考虑使用Quartz或者xxl-job等开源框架,今天我们来了解一下Quartz的基本使用。

二、Quartz核心概念

Quartz是一款功能强大的任务调度库,它核心概念如下:

1、任务 Job

被调度的任务都要实现Job接口execute()方法。

2、触发器 Trigger

Trigger用于设置任务的执行时间,Quartz表达式就是配置在Trigger上。

3、调度器 Scheduler

任务调度器,它负责将Job与Trigger整合起来,然后根据Trigger设置的时间来执行Job,可以start、stop、pause、resume任务。

三、Quartz简单例子

1、导入依赖

注:quartz使用slf4j打印日志,需要引入logback等日志实现。

2、配置文件

quartz.properties

注:设置并行运行的线程数以及配置jobstore存储,有RAMJobStore和JDBCJobSTore两种方式,RAMJobStore当进程重启会丢失,JDBCJobSTore配置存在数据库不会丢失。

3、自定义任务

注:实现Job接口,编写任务代码

4、创建任务调度

控制台输出如下

注:以前AndroidStudio有控制台输出过滤功能,IDEA反而没有,可以安装Grep-Console插件。

四、代码中几个对象解释

1、JobDetail

用于定义任务的数据,Scheduler每次执行时会根据JobDetail创建一个新的Job实例,避免直接执行Job存在并发的问题。

2、JobExecutionContext

可以用来访问Quartz环境及Job本身明细数据。

传参数例子

调度类设置JobDataMap传给JobDetail,在任务类中通过JobExecutionContext获取传入的JobDataMap,也可以通过Trigger传给任务类。

3、Job的状态

每次Scheduler执行Job方法之前都会创建新的Job实例,如果想将数据保留以便下一个运行期,需要在任务类上加上注解PersistJobDataAfterExecution,这样每次执行JobDataMap的数据仍保留

4、常用的Trigger实现类

SimpleTrigger

用于在特定时间启动且以一个可能的间隔时间重复执行的Job任务而设计。

CronTrigger

基于Cron表达式来进行作业调度,Quartz的表达式和Crontab表达式还是有些差别的,在线表达式生成工具会分别提供Quartz和Crontab表达式的生成。

5、Other

Quartz相对 Linux的Crontab更强大,Crontab是进程调度而Quartz是线程调度,Quartz支持集群,另外Quartz还支持Listener便于进行Job的监控,因为数据可以存在DB便于做Job任务管理的可视化。Crontab的使用参见 《时区调整害了Crontab时区调整害了Crontab》。

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

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

相关文章

Linux的常见指令(二)

目录 一、mv 二、cat 三、more 四、less 五、head 六、tail 七、date 八、cal 一、mv 可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录。 功能: 1…

Java21-虚拟线程小试牛刀-meethigher

其他语言,如Go早期就支持了叫做协程的东西,它是轻量化后的线程,而Java异步编程却只有线程的概念。JDK8以后的升级带来的改变总体感觉不大,不过这次JDK21带来的Virtual Thread还是值得体验一把的,可以说是YYDS&#xff…

Linux学习笔记之三(vim编辑器)

目录 1、vim的四种工作模式2、正常模式下的操作指令2.1、进入编辑模式2.2、进入命令行模式2.3、进入视觉模式2.4、光标跳转2.5、复制、粘贴、删除2.6、重复、撤回操作 3、命令行模式下的操作指令 1、vim的四种工作模式 vim的四种工作模式分别是编辑模式(insert mode)、命令行模…

蓝桥杯官网填空题(方格计数)

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 如下图所示,在二维平面上有无数个 11 的小方格。 我们以某个小方格的一个顶点为圆心画一个半径为 50000 的圆。 你能计算出这个圆里有多少个完整的小方…

java入门-JDK下载与安装

1、下载jdk Java 的产品叫JDK(Java Development Kit: Java开发者工具包),必须安装JDK才能使用java 1、官网地址 https://www.oracle.com/java/ https://www.oracle.com/java/technologies/downloads/ 目前比较稳定的版本为 JDK17. 我们就安…

python 之 lamda 函数

文章目录 示例1. 基本使用2. 与内置函数结合使用 注意事项: 当谈到Python的lambda函数,它代表一种匿名函数的能力。与普通函数不同,lambda函数是一种单行函数,通常用于代码更简洁的场景,不需要对函数进行命名。其语法如…

康耐视深度学习ViDi-Plugins菜单介绍

Manage Plugins ----------- 插件管理 能够在此窗口界面看到一些关于插件的信息,也能够在此窗口界面添加或移除(*.dll)文件。 注意: 在没有专业人员指导的情况下禁止操作添加和移除(*.dll)文件,错误的操作有可能会造成软件的功能丧失更严重…

python 之enumerate 函数

文章目录 enumerate() 函数的语法返回值使用示例:示例 1:基本使用示例 2:指定起始索引值 注意事项: enumerate() 是 Python 中一个非常有用的内置函数,用于在迭代迭代器(例如列表、元组、字符串或其他可迭代…

前沿重器[37] | 大模型对任务型对话的作用研究

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经…

Makefile 保姆级使用教程

目录 Makefile 规则 Makefile的使用介绍 make 命令的使用 即时变量、延时变量介绍和使用 使用make命令编译多个文件 假想目标 常用函数 1.$(foreach var,list,text) 2.$(wildcard pattern) 3.$(filter pattern...,text) 4.$(filter-out pattern...,text) 5.$(patsub…

【每日一题】最大单词长度乘积

文章目录 Tag题目来源题目解读解题思路方法一:转态压缩 写在最后 Tag 【位运算-状态压缩】【字符串】【2023-11-06】 题目来源 318. 最大单词长度乘积 题目解读 找出英文字符串数组中两个字符串长度乘积的最大值,并且这两个字符串不含公共字母。 解题…

Day21力扣打卡

打卡记录 在树上执行操作以后得到的最大分数&#xff08;树状DP&#xff09; 链接 大佬的题解 class Solution { public:long long maximumScoreAfterOperations(vector<vector<int>> &edges, vector<int> &values) {vector<vector<int>…

更强的端点控制如何保护系统和数据

端点——员工日常使用的笔记本电脑、设备和工作站——正在成为网络攻击者的目标。 如果他们可以仅通过一个端点访问组织的系统&#xff0c;那么他们就拥有一个启动板&#xff0c;可以从该启动板在网络上横向移动&#xff0c;以窃取数据或植入勒索软件等。 他们甚至可以提升权…

基于白冠鸡算法的无人机航迹规划-附代码

基于白冠鸡算法的无人机航迹规划 文章目录 基于白冠鸡算法的无人机航迹规划1.白冠鸡搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用白冠鸡算法来优化无人机航迹规划。 1.白冠鸡…

Java与Redis的集成

目录 一、Java连接Redis 1.1 导入依赖 1.2 Redis服务器准备 1.3 建立连接 二、Java操作Redis的常见类型数据存储 2.1 String&#xff08;字符串&#xff09;存取值操作 2.1.1 指定存储数据的数据库与存储入库操作 2.1.2 存储数据的修改与查询 2.1.3 数据临时存储 2.2…

Python unittest单元测试框架 TestSuite测试套件

TestSuite 测试套件简介 对一个功能的验证往往是需要很多多测试用例&#xff0c;可以把测试用例集合在一起执行&#xff0c;这就产生了测试套件TestSuite 的概念&#xff0c;它是用来组装单个测试用例&#xff0c;规定用例的执行的顺序&#xff0c;而且TestSuite也可以嵌套Tes…

AI芯片架构体系综述:芯片类型CPU\GPU\FPGA\ASIC以及指令集CSIS\RISC介绍

大模型的发展意味着算力变的越发重要&#xff0c;因为大国间科技竞争的关系&#xff0c;国内AI从业方在未来的一段时间存在着算力不确定性的问题&#xff0c;与之而来的是许多新型算力替代方案的产生。如何从架构关系上很好的理解计算芯片的种类&#xff0c;并且从计算类型、生…

FastBond2阶段2——基于ESP32C3开发的简易IO调试设备

1. 项目介绍 之前买了许多国产单片机esp32c3一直在吃灰&#xff0c;没有发挥它的真实价值。非常感谢硬禾组织的Fastbond2活动&#xff0c;刚好两者经过微妙的碰撞。恰可以用于FastBond2活动主题4 - 测量仪器&#xff08;单片机开发测试领域&#xff09;&#xff0c;或者用于国…

虚拟机项目部署与发布

目录 一.单机项目 1.1. 本机测试 1.2.部署 二.前后端 3.1.准备 3.2.部署 今天就到这里了哦&#xff0c;希望能帮到你哦&#xff01;&#xff01;&#xff01; 一.单机项目 当我们拿到已开发完的项目后&#xff0c;首先需要在我们自己的主机上进行测试&#xff0c;开发完的…

【Shell脚本4】Shell 传递参数

Shell 传递参数 我们可以在执行 Shell 脚本时&#xff0c;向脚本传递参数&#xff0c;脚本内获取参数的格式为&#xff1a;$n。n 代表一个数字&#xff0c;1 为执行脚本的第一个参数&#xff0c;2 为执行脚本的第二个参数&#xff0c;以此类推…… 以下实例我们向脚本传递三个…