Java定时任务

业务场景:

  1. 系统凌晨1点数据备份。
  2. 用户下单半小时未支付订单,需要自动取消订单。
  3. 每10min动态抓取某网站的数据。
  4. 博客定时发送文章。
  5. 每晚定时计算用户当日收益情况并推送给用户最新的数据。

分布式定时任务

Redis

  1. Redis过期事件监听。
  2. Redisson内置延时队

MQ

RocketMQ、RabbitMQ都支持定时消息

分布式任务调度框架

分布式定时任务涉及:

  • 任务:具体的业务逻辑,比如定时发送文章。
  • 调度器:负责任务管理,会分配任务给执行器。
  • 执行器:接收调度器分派的任务并执行。

Quartz

开源任务框架,Java定时任务领域的参考标准,其他的任务调度框架基本都是基于Quartz开发的。使用Quaetz可以很方便的与Spring集成,并支持动态添加任务和集群,但是使用起来比较麻烦,API繁琐,Quartz并没有内置UI管理控制台。

优点:与Spring集成,支持动态添加任务和集群。

缺点:分布式支持不友好、不支持任务可视化管理。

Elastic-Job

  • 官方网站
  • GitHub地址

去中心化设计:Elastic-Job中的定时调度都是有执行器自行触发(调度和处理都是执行器单独完成)

@Component
@ElasticJobConf(name = "dayJob", cron = "0/10 * * * * ?", shardingTotalCount = 2,shardingItemParameters = "0=AAAA,1=BBBB", description = "简单任务", failover = true)
public class TestJob implements SimpleJob {@Overridepublic void execute(ShardingContext shardingContext) {log.info("TestJob任务名:【{}】, 片数:【{}】, param=【{}】", shardingContext.getJobName(), shardingContext.getShardingTotalCount(),shardingContext.getShardingParameter());}
}

优点:与Spring集成、支持分布式、支持集群、支持任务可视化管理。

缺点:依赖中间件Zookeeper(复杂度增加、维护成本变高)

XXXL-Job

支持任务可视化管理、弹性扩容缩容、任务失败重试和警告、任务分片等。

官网

在这里插入图片描述

从上图可以看出,XXL-JOB调度中心执行器 两大部分组成。调度中心主要负责任务管理、执行器管理以及日志管理。执行器主要是接收调度信号并处理。另外,调度中心进行任务调度时,是通过自研 RPC 来实现的。

不同于 Elastic-Job 的去中心化设计, XXL-JOB 的这种设计也被称为中心化设计(调度中心调度多个执行器执行任务)。

Quzrtz 类似 XXL-JOB 也是基于数据库锁调度任务,存在性能瓶颈。不过,一般在任务量不是特别大的情况下,没有什么影响的,可以满足绝大部分公司的要求。

只需要重写 IJobHandler 自定义任务执行逻辑,即可实现。

@JobHandler(value="myApiJobHandler")
@Component
public class MyApiJobHandler extends IJobHandler {@Overridepublic ReturnT<String> execute(String param) throws Exception {// 具体逻辑return ReturnT.SUCCESS;}
}
@XxlJob("myAnnotationJobHandler")
public ReturnT<String> myAnnotationJobHandler(String param) throws Exception {// 具体逻辑return ReturnT.SUCCESS;
}

优点:开箱即用(学习成本比较低)、与 Spring 集成、支持分布式、支持集群、支持任务可视化管理。

缺点:不支持动态添加任务(如果一定想要动态创建任务也是支持的,参见:xxl-job issue277)

SchedulerX

阿里云-- SchedulerX2.0分布式计算原理 & 最佳时间

PowerJob

目前许多大厂都已接入此框架,需要重点关注的分布式任务调度框架。

官网

项目地址

QuartZxxl-jobSchedulerX 2.0PowerJob
定时类型CRONCRONCRON、固定频率、固定延迟、OpenAPICRON、固定频率、固定延迟、OpenAPI
任务类型内置 Java内置 Java、GLUE Java、Shell、Python 等脚本内置 Java、外置 Java(FatJar)、Shell、Python 等脚本内置 Java、外置 Java(容器)、Shell、Python 等脚本
分布式计算静态分片MapReduce 动态分片MapReduce 动态分片
在线任务治理不支持支持支持支持
日志白屏化不支持支持不支持支持
调度方式及性能基于数据库锁,有性能瓶颈基于数据库锁,有性能瓶颈不详无锁化设计,性能强劲无上限
报警监控邮件短信WebHook、邮件、钉钉与自定义扩展
系统依赖JDBC 支持的关系型数据库(MySQL、Oracle…)MySQL人民币任意 Spring Data Jpa 支持的关系型数据库(MySQL、Oracle…)
DAG 工作流不支持不支持支持支持

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

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

相关文章

Data Grouping 数据分组

Goto Data Grid 数据网格 Data Grouping 数据分组 分组功能将具有相同列值的行合并到相同的数据组中。它受 Grid View 和 Banded Grid View 支持。 Apply Grouping 应用分组 数据分组最初在 Data Grid 中启用&#xff08;默认设置&#xff09;。要按列对数据进行分组&#…

对于大根堆的计算时间复杂度的过程

目录 第一步 第二步 第三步 第四步 第一步 首先进行假设 第二步 然后求解出每一层的节点个数这一层节点需要调整的所在高度 第三步 接着每一层节点需要调整的次数 &#xff08;每一层的节点个数 * 这一层节点需要调整的所在高度&#xff09;再全部相加起来 利用*2T&…

ANNOVAR下载

1.官网 https://annovar.openbioinformatics.org/en/latest/user-guide/startup/ 都填英文 要不然会报错 tar -xzvf annovar.latest.tar.gztree . ├── annotate_variation.pl ├── coding_change.pl ├── convert2annovar.pl ├── example │ ├── ex1.avinput…

【电子通识】TINA-TI中怎么用分段线性源做周期性波形

在文章【电子通识】TINA-TI 如何产生动态电流波形?中我们讲到我们可以用piecewise linear分段性线源做一个动态脉冲。 但是这个动态脉冲只能保持一定的时间,那么如何做成周期性的动态脉冲呢? 我们使用以下关键字,来完成周期性动态负载创建 Repeat Forever ....周期…

Llamaindex RAG 实践

大模型支持的最强大的应用程序之一是复杂的问答聊天机器人。这些应用程序可以回答有关特定源信息的问题。这些应用程序使用一种称为检索增强生成 &#xff08;RAG&#xff09; 的技术。 1. 什么是RAG&#xff1f; 当你需要给模型注入新的知识时&#xff0c;有两种方法&#xf…

外包干了2个月,技术明显退步

回望过去&#xff0c;我是一名普通的本科生&#xff0c;于2019年通过校招有幸加入了南京某知名软件公司。那时的我&#xff0c;满怀着对未来的憧憬和热情&#xff0c;投入到了功能测试的岗位中。日复一日&#xff0c;年复一年&#xff0c;转眼间&#xff0c;我已经在这个岗位上…

Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行信号时域仿真操作指导(一)-单个信号

Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行信号时域仿真操作指导(一)-单个信号 Power Ground Noise Simulation模式除了可以对电源进行时域仿真外&#xff0c;同样支持对信号进行时域仿真&#xff0c;以下图为例进行说明 2D视图 3D view 本例中观测信号D2从…

String模拟实现【C++】【STL】

String模拟实现【C】【STL】 构造函数拷贝构造赋值重载析构函数<<赋值重载插入函数reserveappend函数push_back函数 earse函数完整代码string.hstring.cpp STL中有两个属性capacity和size&#xff0c;capacity是真正STL容器的真正内存大小&#xff0c;size是STL容器中数据…

前端CSS3 渐变详解

文章目录 CSS3 渐变详解一、引言二、CSS3 渐变基础1、线性渐变1.1、基本线性渐变1.2、改变渐变方向 2、径向渐变2.1、基本径向渐变2.2、设置径向渐变的中心 三、高级渐变技巧1、重复渐变1.1、重复线性渐变1.2、重复径向渐变 四、总结 CSS3 渐变详解 一、引言 在现代网页设计中…

Ubuntu系统安装minicom软件连接交换机

安装minicom&#xff1a; 电脑主机串口线连接上交换机的console口。开打乌班图系统终端&#xff0c;输入sudo -i切换为root用户 方法一&#xff1a; 输入 sudo apt-get install minicom 命令&#xff0c;安装minicom软件。 minicom 必须带有安装包的完整路径 文件名称 后…

异星工厂_1

经验 首次体验异星工厂这款游戏&#xff0c;得出了以下经验。 1. 基地的构建顺序&#xff1a;煤&#xff0c;电&#xff0c;原料&#xff0c;传送流&#xff0c;组装器&#xff0c;防御武器&#xff0c;其他 2. 永远不要让采集&#xff08;生产者&#xff09;停止&#xff0…

前端面试题每日一学_6

今日一题&#xff1a; 下面的CSS代码中&#xff0c;定义了一个帧动画&#xff0c;请问该帧动画能否正常流畅的执行&#xff1f; keyframes move {50% {/* 改变自定义变量的值 */--x: 100px;/* 改变元素的背景颜色 并使用!important */background: yellow !important;} } .d {…

QScrollArea应用范例,包含完整代码

QScrollArea使用案例,如果只是拖控件,做简单的布局那应该不难,但如果在复杂的布局中,用纯代码的方式来应用QScrollArea还是有点繁琐的,下面我写一段话,可能会有点绕 你需要先将widget添加到scrollArea,然后再将scrollArea添加到它要去的layout然后再设置scrollArea里的w…

【操作系统】每日 3 题(十四)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12820365.html &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享操作系统面试中常见的面试题给大家~ ❤️…

销售管理SCRM助力企业高效提升业绩与客户关系管理

内容概要 在当今这个快速变化的市场环境中&#xff0c;企业面临着日益加剧的竞争&#xff0c;寻找更高效的销售管理工具显得尤为重要。销售管理SCRM不仅是一个单纯的客户关系管理工具&#xff0c;更是推动企业业绩提升的重要助力。在这一背景下&#xff0c;SCRM以其独特的优势…

JAVA基础-多线程线程池

文章目录 1. 多线程1.1什么是多线程&#xff08;1&#xff09;并发和并行&#xff08;2&#xff09;进程和线程 1.2多线程的实现方式1.2.1 方式一&#xff1a;继承Thread类1.2.2 方式二&#xff1a;实现Runnable接口1.2.3方式三: 实现Callable接口 1.3 常见的成员方法1.3.1 设置…

【日记】清仓了三个基金(1199 字)

正文 今天好忙。而且是瞎忙。主要是办公室找的家具厂不靠谱&#xff0c;上次桌子尺寸量错了&#xff0c;得换。今天拿了新的来&#xff0c;又要腾一遍东西。上午时间就没了。 那个疑似洗钱的客户又来了。他开户意愿真的好强烈。没办法&#xff0c;上午把账号给他开了出来&#…

微服务的注册中心Nacos

前言 Nacos是阿里巴巴开源的服务注册中心以及配置中心&#xff0c;致力于给开发者提供一款便捷、简单上手的开源框架。 Nacos究竟有什么惊人的地方呢&#xff1f;看下图&#xff1a; 从上图不难看出阿里巴巴的野心&#xff0c;一个Nacos干掉了Spring Cloud的三大组件&#xf…

怎么启动python脚本文件

创建一个简单的python入门代码&#xff0c;以便示范。 存储文件并复制该python文件的存储路径。 使用cd 命令切换工作目录到python文件所在的目录。 输入变量环境中的python路径和python文件的名字。 回车执行后&#xff0c;可完成命令行的python文件运行。