分布式定时任务调度框架选型

Spring Boot集成定时任务框架全解析 通过本文的详细解析,相信您已经掌握了Spring Boot集成主流定时任务框架的核心要点。无论是轻量级的@Scheduled,还是企业级的Quartz,亦或是分布式的XXL-JOB,每种方案都有其独特的适用场景。‌技术选型的本质是平衡‌——在开发效率、维护成本、系统复杂度之间找到最适合业务的最优解。你在实践中遇到过哪些棘手的定时任务问题?是任务雪崩还是分布式锁失效?欢迎在评论区分享你的实战经历! 阅读详情

背景

业务场景

  1. 定期执行任务:如每天0点做资源稽查;

需求和痛点

  1. 集群部署服务时,如何确保任务不被重复执行?---最急迫
  2. 如何监控、告警等;
  3. 高可用、无单点故障;
  4. 优秀的并行处理能力、分片能力;

自研 or 开源

任何工具的使用都要结合自身的业务场景,脱落业务场景谈技术选型就是耍流氓。
考虑私有云场景业务量一般,高并发场景很少遇到,同一时间也不会有超大量定时任务同时需要执行,所以考虑自研也未尝不可。
目前自研最急需解决的问题并不是高并发,而是如何避免任务被重复执行;
场景就变成了:

多个应用在同一个时间都尝试去执行任务,但最终只有一个应用真正执行。

这样的话,立马就会让人联想到使用锁去解决,因为是多个应用,所以就是分布式锁。那么,场景又变了:

多个应用在同一个时间都尝试去获取分布式锁,只有一个应用能抢到这把锁,抢到锁的应用可以执行定时任务,其他应用则直接放弃,等待下一次执行时间。

抢锁的时机是每次定时任务执行之前,这又让我联想到了AOP,那么利用注解也就顺理成章了。

下面的 ShedLock就是基于AOP + 注解的思想。

ShedLock

与Spring的集成挺方便;

Distributed lock for your scheduled tasks

Github: start: 1K Fork: 192,最近一次代码提交 6months ago

ShedLock makes sure that your scheduled tasks are executed at most once at the same time. If a task is being executed on one node, it acquires a lock which prevents execution of the same task from another node (or thread). Please note, that if one task is already being executed on one node, execution on other nodes does not wait, it is simply skipped.

ShedLock uses external store like Mongo, JDBC database, Redis, Hazelcast, ZooKeeper or others for coordination.

ShedLock is not a distributed scheduler

Please note that ShedLock is not and will never be full-fledged scheduler, it's just a lock. If you need a distributed scheduler, please use another project. ShedLock is designed to be used in situations where you have scheduled tasks that are not ready to be executed in parallel, but can be safely executed repeatedly.

重要信息:

  1. ShedLock可使用MongoDB、JDBC-DB、Redis或Zookeeper等来实现分布式锁,具体采用哪种方式,由使用者决定;
  2. 它仅仅是一个分布式锁,并不是调度程序;

与Spring的集成很简单(官方文档的示例,自己并未测试过),示例:

假设一个task每15分钟执行一次,每次运行的时间都不是很长(即:应该在15min分钟内可以运行完),更重要的是,不管起多少个实例,都只希望在15分钟内该任务有且只被运行一次!

//示例:与Spring的原生注解 @Scheduled配合使用
import net.javacrumbs.shedlock.core.SchedulerLock;

@Scheduled(cron = "0 */15 * * * *")//每15分钟运行一次
@SchedulerLock(name = "scheduledTaskName", lockAtMostFor = "14m", lockAtLeastFor = "14m")
public void scheduledTask() {
   // do something
}
//lockAtMostFor : 表示最多锁定14分钟,主要用于防止执行任务的节点挂掉(即使这个节点挂掉,在14分钟后,锁也被释放),一般将其设置为明显大于任务的最大执行时长;如果任务运行时间超过该值(即任务14分钟没有执行完),则该任务可能被重复执行!
//lockAtLeastFor : 至少锁定时长,确保在15分钟内,该任务不会运行超过1次;

额外补充一句,关于 @Scheduled的一些不注意的细节(单线程执行),需要特别注意:SpringTask实现定时任务

Configure LockProvider

使用JdbcTemplete来实现分布式锁

CREATE TABLE shedlock(
    name VARCHAR(64),
    lock_until TIMESTAMP(3) NULL,
    locked_at TIMESTAMP(3) NULL,
    locked_by  VARCHAR(255),
    PRIMARY KEY (name)
)

依赖

<dependency>
    <groupId>net.javacrumbs.shedlock</groupId>
    <artifactId>shedlock-provider-jdbc-template</artifactId>
    <version>4.5.1</version>
</dependency>

配置

import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;

...

@Bean
public LockProvider lockProvider(DataSource dataSource) {
    return new JdbcTemplateLockProvider(dataSource);
}

@Bean
    public ScheduledLockConfiguration scheduledLockConfiguration(LockProvider lockProvider) {
        return ScheduledLockConfigurationBuilder
                .withLockProvider(lockProvider)
                .withPoolSize(10)
                .withDefaultLockAtMostFor(Duration.ofMinutes(10))
                .build();
    }

基于Piston的思路(异步监控),重写一个

todo

思路:

  1. 还是基于Innodb引擎的行锁;
  2. 状态:应该基于调度时间去判断状态;

选型参考

  1. 简单、易上手;
  2. 额外依赖较少,比如是否需要依赖MQ、Zookeeper等;
  3. 是否方便集成;

开源产品对比

开源产品:任务调度系统汇总

Quartz

Java事实上的定时任务标准。但Quartz关注点在于定时任务而非数据,并无一套根据数据处理而定制化的流程。虽然Quartz可以基于数据库实现作业的高可用,但缺少分布式并行调度的功能

原理

独立的Quratz节点之间是不需要通信的,不同节点之间是通过数据库表来感知另一个应用,只有使用持久的JobStore才能完成Quartz集群。如果某一个节点失效,那么Job会在其他节点上执行。

如何保证只在一台机器上触发?

  • 数据库悲观锁
  • 一旦某一节点线程获取了该锁,那么Job就会在这台机器上被执行,其他节点进行锁等待;

缺点

  1. 不适合大量的短任务 & 不适合过多节点部署;
  2. 解决了高可用的问题,并没有解决任务分片的问题,存在单机处理的极限(即:不能实现水平扩展)。
  3. 需要把任务信息持久化到业务数据表,和业务有耦合
  4. 调度逻辑和执行逻辑并存于同一个项目中,在机器性能固定的情况下,业务和调度之间不可避免地会相互影响。
  5. quartz集群模式下,是通过数据库独占锁来唯一获取任务,任务执行并没有实现完善的负载均衡机制。

Elastic-Job

官方文档

GitHub: star 5.7K Fork:2.6K

Elastic-Job is a distributed scheduled job framework, based on Quartz and Zookeeper

Elastic Job是当当网架构师开发,是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成;定位为轻量级无中心化解决方案,使用 jar 包的形式提供分布式任务的协调服务。支持分布式调度协调、弹性扩容缩容、失效转移、错过执行作业重触发、并行调度、自诊断和修复等等功能特性。

Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务;Elastic-Job-Cloud采用自研Mesos Framework的解决方案,额外提供资源治理、应用分发以及进程隔离等功能;

Elastic-Job-Lite并没有宿主程序,而是基于部署作业框架的程序在到达相应时间点时各自触发调度。它的开发也比较简单,引用Jar包实现一些方法即可,最后编译成Jar包运行。Elastic-Job-Lite的分布式部署全靠ZooKeeper来同步状态和原数据。实现高可用的任务只需将分片总数设置为1,并把开发的Jar包部署于多个服务器上执行,任务将会以1主N从的方式执行。一旦本次执行任务的服务器崩溃,其他执行任务的服务器将会在下次作业启动时选择一个替补执行。如果开启了失效转移,那么功能效果更好,可以保证在本次作业执行时崩溃,备机之一立即启动替补执行。

Elastic-Job-Lite的任务分片也是通过ZooKeeper来实现,Elastic-Job并不直接提供数据处理的功能,框架只会将分片项分配至各个运行中的作业服务器,开发者需要自行处理分片项与真实数据的对应关系。框架也预置了一些分片策略:平均分配算法策略,作业名哈希值奇偶数算法策略,轮转分片策略。同时也提供了自定义分片策略的接口。

另外Elastic-Job-Lite还提供了一个任务监控和管理界面:Elastic-Job-Lite-Console。它和Elastic-Job-Lite是两个完全不关联的应用程序,使用ZooKeeper来交换数据,管理人员可以通过这个界面查看、监控和管理Elastic-Job-Lite的任务,必要的时候还能手动触发任务

功能列表

  • 分布式调度协调
  • 弹性扩容缩容
  • 失效转移
  • 错过执行作业重触发
  • 作业分片一致性,保证同一分片在分布式环境中仅一个执行实例
  • 自诊断并修复分布式不稳定造成的问题
  • 支持并行调度
  • 支持作业生命周期操作
  • 丰富的作业类型
  • Spring整合以及命名空间提供
  • 运维平台

优缺点

优点:

  • 基于成熟的定时任务作业框架Quartz cron表达式执行定时任务;
  • 支持任务分片:可以拆分任务,分别由不同节点执行;
  • 官网文档齐全,全中文;
  • 弹性扩容缩容:运行中的作业服务器崩溃,或新增N台作业服务器,作业框架将在下次作业执行前重新分片,不影响当前作业执行;
  • 任务监控和管理界面;

缺点:

  • 依赖Zookeeper;

XXL-JOB

官方文档

GitHub: star: 12.9K Fork:5.5K

使用该框架的公司:>300家

XXL-Job官网是大众点评员工徐雪里于2015年发布的分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

设计思想

将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。

将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。

因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;

系统组成

  • 调度模块(调度中心):
    负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;
    支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover。
  • 执行模块(执行器):
    负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;
    接收“调度中心”的执行请求、终止请求和日志请求等。

其他

uncode-schedule

基于zookeeper,比较小众,不推荐

基于zookeeper+spring task/quartz的分布式任务调度组件,确保所有任务在集群中不重复,不遗漏的执行。支持动态添加和删除任务。

LTS

最近一次更新在2年前,目前不是很活跃;也比较小众,不推荐

light-task-scheduler

LTS(light-task-scheduler)主要用于解决分布式任务调度问题,支持实时任务,定时任务和Cron任务。有较好的伸缩性,扩展性;

TBSchedule

阿里早期开源的分布式任务调度系统。代码略陈旧,使用timer而非线程池执行任务调度。众所周知,timer在处理异常状况时是有缺陷的。而且TBSchedule作业类型较为单一,只能是获取/处理数据一种模式。还有就是文档缺失比较严重。

依赖Zookeeper;

TBSchedule是一款非常优秀的高性能分布式调度框架,广泛应用于阿里巴巴、淘宝、支付宝、京东、聚美、汽车之家、国美等很多互联网企业的流程调度系统。tbschedule在时间调度方面虽然没有quartz强大,但是它支持分片功能。和quartz不同的是,tbschedule使用ZooKeeper来实现任务调度的高可用和分片。

TBSchedule的分布式机制是通过灵活的Sharding方式实现的,分片的规则由客户端决定,比如可以按所有数据的ID按10取模分片、按月份分片等等。TBSchedule的宿主服务器可以进行动态扩容和资源回收,这个特点主要是因为它后端依赖的ZooKeeper,这里的ZooKeeper对于TBSchedule来说是一个NoSQL,用于存储策略、任务、心跳信息数据,它的数据结构类似文件系统的目录结构,它的节点有临时节点、持久节点之分。调度引擎启动后,随着业务量数据量的增多,当前Cluster可能不能满足目前的处理需求,那么就需要增加服务器数量,一个新的服务器上线后会在ZooKeeper中创建一个代表当前服务器的一个唯一性路径(临时节点),并且新上线的服务器会和ZooKeeper保持长连接,当通信断开后,节点会自动摘除。

TBSchedule会定时扫描当前服务器的数量,重新进行任务分配。TBSchedule不仅提供了服务端的高性能调度服务,还提供了一个scheduleConsole的war包,随着宿主应用的部署直接部署到服务器,可以通过web的方式对调度的任务、策略进行监控管理,以及实时更新调整。


Saturn

Saturn是唯品会在github开源的一款分布式任务调度产品。它是基于当当elastic-job 1.0版本来开发的,其上完善了一些功能和添加了一些新的feature。

亮点:

支持多语言开发 python、Go、Shell、Java、Php。

管理控制台和数据统计分析更加完善

缺点:

技术文档较少 , 该框架是2016年由唯品会的研发团队基于elastic-job开发而来


Opencron

比较小众,不推荐


Antares

Antares 是一款基于 Quartz 机制的分布式任务调度管理平台,内部重写执行逻辑,一个任务仅会被服务器集群中的某个节点调度。用户可通过对任务预分片,有效提升任务执行效率;也可通过控制台 antares-tower 对任务进行基本操作,如触发,暂停,监控等。

Antares 是基于 Quartz 的分布式调度,支持分片,支持树形任务依赖,但是不是跨平台的


sia-task

没有仔细研究,依赖Zookeeper,感觉更偏向于解决编排和跨平台

无论是互联网应用或者企业级应用,都充斥着大量的批处理任务。我们常常需要一些任务调度系统帮助我们解决问题。随着微服务化架构的逐步演进,单体架构逐渐演变为分布式、微服务架构。在此的背景下,很多原先的任务调度平台已经不能满足业务系统的需求。于是出现了一些基于分布式的任务调度平台。这些平台各有其特点,但各有不足之处,比如不支持任务编排、与业务高耦合、不支持跨平台等问题。不是非常符合公司的需求,因此我们开发了微服务任务调度平台(SIA-TASK)。

SIA是我们公司基础开发平台Simple is Awesome的简称,SIA-TASK(微服务任务调度平台)是其中的一项重要产品,SIA-TASK契合当前微服务架构模式,具有跨平台,可编排,高可用,无侵入,一致性,异步并行,动态扩展,实时监控等特点。


对比和结论

XXL-Job 侧重的业务实现的简单和管理的方便,学习成本简单,失败策略和路由策略丰富。推荐使用在“用户基数相对少,服务器数量在一定范围内”的情景下使用
Elastic-Job 关注的是数据,增加了弹性扩容和数据分片的思路,以便于更大限度的利用分布式服务器的资源。但是学习成本相对高些,推荐在“数据量庞大,且部署服务器数量较多”时使用

对于并发场景不是特别高的系统来说,xxl-job配置部署简单易用,不需要引入多余的组件,同时提供了可视化的控制台,使用起来非常友好,是一个比较好的选择。

Elastic-Job

这个框架大概在2年前很火,当时使用的公司很多,想必很多人也听过了,但是很可惜现在已经不在维护了,代码已经有2年没有更新了,这里违反了更新频率的原则,如果出现问题可能都没什么人帮助你,所以并不是很推荐使用。

更倾向于选择XXL-JOB:

  1. 轻量级,支持通过Web页面对任务进行动态CRUD操作,操作简单
  2. 只依赖数据库作为集群注册中心,接入开发简单,不需要ZK
  3. 高可用、解耦、高性能、监控报警、分片、重试、故障转移
  4. 团队持续开发,社区活跃
  5. 支持后台直接查看每个任务执行实时日志,ELASTIC-JOB中应该是没有这个功能

ShedLock集成更简单,如果验证通过,也未必不是一个好选择!


其他

中心化调度 vs 去中心化调度

中心化去中心化
实现难度高低
部署难度高低
触发时间统一控制可以不可以
触发延迟有无
异构语言支持容易不容易

中心化调度

  • XXL-Job:有调度中心;

去中心化调度

  • Quartz
  • Elastic-Job:实现时,就是基于Quartz的基于数据库的分布式思想;
分布式开源调度框架TBSchedule原理与应用 第一部分 TBSchedule基本概念及原理 1. 概念介绍 2. 工作原理 3. 源码分析 4. 与其他开源调度框架对比 第二部分 TBSchedule分布式调度示例 1. TBSchedule源码下载 2. 引入源码Demo开发示例 3. 控制台配置任务调度 4. selectTasks方法参数说明 5. 创建调度策略参数说明 6. 创建任务参数说明第一部分 TBSchedule基本概念 阅读详情

相关推荐

淘宝定时任务 tbschedule实战

说明: tbschedule项目其实可以分为两部分: 1)schedule管理控制台。负责控制、监控任务执行状态2)实际执行job的客户端程序。在实际使用时,首先要启动zookeeper, 然后部署tbschedule web界面的管理控制台,最后启动实际执行job的客户机器。这里zookeeper并不实际控制任务调度,它只是负责与N台执行job的客户端通讯,协调、管理、监控这些机器的运行信息

convict_EVA的专栏 1万+

python分布式任务调度_分布式定时任务调度框架选型

分布式定时任务调度框架选型背景业务场景定期执行任务:如每天0点做资源稽查;需求和痛点集群部署服务时,如何确保任务不被重复执行?---最急迫如何监控、告警等;高可用、无单点故障;优秀的并行处理能力、分片能力;自研 or 开源任何工具的使用都要结合自身的业务场景,脱落业务场景谈技术选型就是耍流氓。考虑私有云场景业务量一般,高并发场景很少遇到,同一时间也不会有超大量定时任务同时需要执行,所以考虑自研也未...

weixin_39953578的博客 964

分布式定时任务框架选型:Quartz与Xxl-Job深度对比

定时任务调度是分布式系统中的关键技术组件,其核心原理是通过时间触发机制执行预设业务逻辑。现代调度框架采用分布式锁、持久化存储等技术确保任务可靠性,在电商订单处理、数据同步等场景具有重要价值。Quartz作为经典调度框架,通过JobStore实现任务持久化,而Xxl-Job则创新性地采用中心化调度架构,提供可视化控制台和自动故障转移能力。本文通过金融、物流等行业的实战案例,详解两种框架在分布式环境下的配置要点与性能优化策略,并给出包含分片处理、幂等设计在内的生产级解决方案。

weixin_30642869的博客 379

分布式调度框架TBSchedule使用方法

一、TBSchedule简介 TBSchedule是来自淘宝的分布式调度开源框架,基于Zookeeper纯Java实现,其目的是让一种批量任务或者不断变化的任务,能够被动态的分配到多个主机的JVM中的不同线程组中并行执行。所有的任务能够被不重复,不遗漏的快速处理。这种框架任务的分配通过分片实现了不重复调度,又通过架构中Leader的选择,存活的自我保证,完成了可用性和伸缩性的保障。 TBSch...

weixin_30814329的博客 961

深度分析:Spring Boot 定时任务的技术选型对比,看完你就懂了

1. 概述 在产品的色彩斑斓的黑的需求中,有存在一类需求,是需要去定时执行的,此时就需要使用到定时任务。例如说,每分钟扫描超时支付的订单,每小时清理一次日志文件,每天统计前一天的数据并生成报表,每个月月初的工资单的推送,每年一次的生日提醒等等。 其中,我最喜欢“每个月月初的工资单的推送”,你呢? 在 JDK 中,内置了两个类,可以实现定时任务的功能: java.util.Timer :可以通过创建 java.util.TimerTask 调度任务,在同一个线程中串行执行,相互影响。也就是说,对于同一个 Ti

欢迎您访问我的公众号【前程有光】 3201

DistributedLocking:分布式锁定C#库

分布式锁定 分布式锁的简单C#实现,可以在专注于可扩展性的多客户端(流程)环境中使用。 快速开始 该库旨在通过抽象使用,因此,无论选择哪种基础存储库,基本操作均保持不变。 您可以在下面找到基本用法示例。 获取锁 为了获取锁,您需要提供: 资源ID-可以识别您的资源的东西, 所需的锁的TTL(生存时间)-如果您的进程无法正常释放锁,则它必须自动将自身变为非活动状态,以避免无限锁。 为此,您有一个简单的界面: // IDistributedLockProvider provider = ... var resourceId = " Resource ID " ; var ttl = TimeSpan . FromMinutes ( 5 ); var distributedLock = await provider . TryAcquireAsync ( resourceI

定时任务框架选型

极速调研中小项目中的分布式定时任务框架

ForAnnuus的博客 749

7 series FPGAs Transceiver Wizard IP核使用和测试

学习FPGA一段时间了,前面一直没有系统的总结,这学期把在项目中用到的IP核和一些调试过程中遇到的问题总结一下发出来,坚持下去,一起进步! 今天总结一下的GTH核的使用和测试。 软件版本:Vivado 2017.4 IP核版本:7 Series FPGAs Transceivers Wizard (3.6) FPGA:xc7vx690tfft1927 实现功能: 四路光纤数据接收,由于GTX IP...

qq_39921762的博客 1万+

定时任务&分布式框架:从单机到亿级流量,高可用架构实战手册!

本文介绍了生产级定时任务框架的选型与避坑指南。针对传统单机crontab在分布式场景下的致命缺陷,推荐主流开源方案:Java技术栈可选XXL-JOB(轻量易用)、ElasticJob(云原生)或DolphinScheduler(复杂工作流),Python技术栈推荐Celery。以XXL-JOB为例演示了快速搭建调度中心、集成执行器的具体步骤,并强调生产环境必须关注幂等性设计、Cron表达式优化、分布式锁等核心问题,避免任务重复执行和系统过载风险。适用于面临定时任务管理难题的中高级开发者。

weixin_58375621的博客 872

深度学习入门:使用CMSIS-NN在微控制器上部署模型的完整指南与Python Jupyter实践

CMSIS-NN是ARM为Cortex-M系列微控制器设计的神经网络库。它旨在提供一套高效、轻量级的神经网络API,使得开发者可以在资源受限的微控制器上运行深度学习模型。CMSIS-NN优化了各种常见的神经网络层,如卷积层、全连接层等,确保它们在微控制器上的运行效率。# 定义模型])# 编译模型# 训练模型这样,我们就得到了一个简单的手写数字识别模型。注意:为了简洁和清晰,本文中的代码可能不是最优的或最完整的实现。为了获得完整的项目和更多的优化技巧,请下载完整项目。

m0_57781768的博客 5882

Unity URP管线下的Highlight Plus插件,从导入到实现物体高亮的保姆级避坑指南

本文详细解析了在Unity URP管线中使用Highlight Plus插件实现物体高亮的完整流程与常见问题解决方案。从URP环境配置、插件导入避坑到相机设置优化,提供了一套完整的保姆级指南,帮助开发者高效解决高亮效果不显示等典型问题,并包含移动端性能优化与复杂场景管理的高级技巧。

weixin_27379781的博客 408

《SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战》​

Scheduled是轻量级单机定时任务的便捷选择,而Quartz等框架则为企业级调度需求提供了完整的解决方案。在实际项目中,需根据任务复杂度、集群部署需求、运维成本等因素综合决策。对于Spring Boot应用,若后续可能演进为分布式架构,初期可优先考虑使用XXL-JOB或Elastic Job等云原生友好的调度中间件。

摘星编程的博客 1万+

信创环境下,软件测试如何破局?

毕竟,在自主可控的道路上,每一行通过测试的代码,都在为信创产业的未来添砖加瓦。未来,测试工程师不仅要验证软件在信创环境的可用性,更要基于国产软硬件的特性,推动软件进行 “原生设计”—— 例如,针对国产 CPU 的多核架构优化代码,基于国产数据库的索引机制提升查询效率。某政务云平台的测试数据显示,在 “飞腾芯片 + 麒麟操作系统” 环境下,系统的并发处理能力较传统环境下降约 15%,测试团队通过优化软件的线程调度逻辑,最终将性能损失控制在 5% 以内 —— 这正是信创性能测试的价值所在。

weixin_45608163的博客 885

Java 定时任务与分布式调度工具分析

本文总结了Java任务调度中间件的选型指南。针对单机轻量场景推荐SpringTask或ScheduledExecutorService;分布式场景根据不同需求推荐xxl-job(易上手)、ElasticJob(分片调度)、PowerJob(任务编排)、Quartz集群(兼容传统)等方案。文章详细对比了各框架特性,提供典型代码示例,并给出运维建议(高可用、幂等设计、监控告警等)。最后按场景提供选型矩阵:简单任务用SpringTask,需要UI管理选xxl-job,分片处理用ElasticJob,云原生环境推荐

小健学Java的博客 1501

MuJoCo新手必看:5分钟搞定你的第一个机器人仿真(附Python代码)

本文为零基础新手提供了一份详尽的MuJoCo物理仿真引擎入门指南。从环境搭建、MJCF模型文件解析,到编写Python控制代码,手把手教你5分钟内创建并运行第一个机器人仿真。内容涵盖双摆模型控制与自定义四轮小车构建,帮助你快速掌握这一高性能开源工具,迈出机器人学与强化学习仿真的第一步。

weixin_29032489的博客 655

使用buildroot系统的qmake编译QT出现Unknown module(s) in QT: xxxx 的错误解决方法

可以看到,我这里使用的是 qt5base-5.15.2 目录下的qmake,这个qmake只包含了基础的qt模块,而额外添加的qt模块没有包含进去,需要使用。可以看到我这里是有的,如果你跟我一样,模块存在,但是还是报找不到对应模块的错误的话,大概率是跟我一样,用错qmake了,看第二点。在包含 qt5base 目录下查看,是否有对应模块的目录,如果没有的话,需要通过make menuconfig 添加一下。目录下的qmake才可以。

T541132的博客 2489

SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战

Scheduled是Spring框架提供的内置定时任务注解,基于Spring的任务调度线程池执行。使用简单,适合单实例应用。支持固定延迟、固定频率、cron表达式等多种触发方式。不支持持久化,任务调度依赖应用实例,重启任务丢失。不适合分布式环境,无法协调多个实例任务执行。Quartz是一个功能强大的企业级调度框架。支持任务持久化(数据库存储调度信息)。支持复杂的任务触发机制和任务链。支持集群模式,允许多个节点共享任务信息,避免任务重复执行。具备丰富的API和灵活的扩展能力。

wangjinjin180的博客 716

【SpringBoot 4.x 第70节】夯爆了,企业级 API 设计规范落地:状态码、错误码、接口文档与兼容性(超详解)!

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。本专栏面向 有一定 Java 基础,但尚未系统学习 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,带你从第一个 Hello API 开始,逐步完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 131

遇见未知的Saturn |准备篇:分布式定时任务调度系统技术解决方案(xxl-job、Elastic-job、Saturn)

一般的技术quartz、spring task、java.util.Timer,这几种如果在单一机器上跑其实问题不大,但是如果一旦应用于集群环境做分布式部署,就会带来一个致命的问题,那就是重复执行,当然解决方案有,但是必须依赖数据库,将任务执行状态持久化下来。Saturn (任务调度系统)是唯品会开源的一个分布式任务调度平台,取代传统的Linux Cron/Spring Batch Job的方式,做到全域统一配置,统一监控,任务高可用以及分片并发处理。如分片过程中主服务器下线,则先选举主服务器,再分片。

沁雅学院 6664

31、贝叶斯认知建模与隐马尔可夫模型:理论与应用

本文探讨了贝叶斯认知建模与隐马尔可夫模型(HMM)的理论基础及其在认知科学和神经科学中的应用。重点介绍了贝叶斯定理和HMM的基本原理,并结合实际案例,如情绪识别系统和脑机接口(BCI),展示了它们在处理复杂认知任务中的强大能力。文章还讨论了贝叶斯-HMM模型的技术细节、优势与局限性,以及未来的发展前景。

meat5的博客 141

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

分布式定时任务框架选型,写得太好了!

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料。

F1520080的博客 831

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

分布式定时任务调度系统技术解决方案(xxl-job、Elastic-job、Saturn)

1.业务场景 保险人管系统每月工资结算,平安有150万代理人,如何快速的进行工资结算(数据运算型) 保险短信开门红/电商双十一 1000w+短信发送(短时汇聚型) 工作中业务场景非常多,所涉及到的场景也各不相同,这使得我们定时任务系统应该集管理、调度、任务分配、监控预警为一体的综合调度系统,如何打造一套健壮的、适应不同场景的系统,技术选型尤其重要。 针对以...

weixin_30768175的博客 1266

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: spring事务的传播机制与事务挂起
下一篇: Telegraf监控客户端调研笔记(1)-介绍、安装、初步测试
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值