0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Spring Boot集群/分布式下的定时任务说明

jf_78858299 来源:SpringBoot 作者:林祥纤 2023-04-12 11:31 次阅读

如有8个实例,执行的时候会随机分配一个实例运行还是8个都会运行?在这节博客中没有办法完全解决这个问题,在这里抛砖引玉说明下。 看下本章大纲:

(1)回顾定时任务的实现方式;

(2)集群环境下的任务调度说明;

(3)Spring的Scheduled Task实现集群思路;

(4)Quartz实现集群思路;

我们一起看下本节具体的内容:

(1)回顾定时任务的实现方式;

定时任务的实现方式有多种,例如

JDK自带的Timer+TimerTask方式,

spring3.0以后的调度任务(ScheduledTask),

Quartz等。

(2)集群环境下的任务调度说明;

Timer+TimerTask是最基本的解决方案;

Spring自带的Scheduled Task是一个轻量级的定时任务调度器,支持固定时间(支持cron表达式)和固定时间间隔调度任务,支持线程池管理

以上两种方式有一个共同的缺点,那就是应用服务器集群下会出现任务多次被调度执行的情况,因为集群的节点之间是不会共享任务信息的,每个节点上的任务都会按时执行。

Quartz是一个功能完善的任务调度框架,特别牛叉的是它支持集群环境下的任务调度,当然代价也很大,需要将任务调度状态序列化到数据库。Quartz框架需要10多张表协同,配置繁多。

(3)Spring的Scheduled Task实现集群思路;

如果在实际项目中使用的scheduled task的话,那么也有自己变通的方式进行实现。

无非是一个任务互斥访问的问题,声明一把全局的“锁”作为互斥量,哪个应用服务器拿到这把“锁”,就有执行任务的权利,未拿到“锁”的应用服务器不进行任何任务相关的操作。另外就是这把“锁”最好还能在下次任务执行时间点前失效。

(4)Quartz实现集群思路;

选Quartz的团队基本上是冲着Quartz本身实现的集群去的, 不然JDK自带Timer就可以实现相同的功能, 而Timer存在的单点故障是生产环境上所不能容忍的。 在自己造个有负载均衡和支持集群(高可用、伸缩性)的调度框架又影响项目的进度, 所以大多数团队都直接使用了Quartz来作为调度框架

一个Quartz集群中的每个节点是一个独立的Quartz应用,它又管理着其他的节点。这就意味着你必须对每个节点分别启动或停止。Quartz集群中,独立的Quartz节点并不与另一其的节点或是管理节点通信,而是通过相同的数据库表来感知到另一Quartz应用的

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • spring
    +关注

    关注

    0

    文章

    332

    浏览量

    14161
  • Boot
    +关注

    关注

    0

    文章

    142

    浏览量

    35248
收藏 人收藏

    评论

    相关推荐

    spark集群使用hanlp进行分布式分词操作说明

    本篇分享一个使用hanlp分词的操作小案例,即在spark集群中使用hanlp完成分布式分词的操作,文章整理自【qq_33872191】的博客,感谢分享!以下为全文: 分两步:第一步:实现
    发表于 01-21 10:45

    如何在集群部署时实现分布式session?

    集群部署时的分布式 session 如何实现?
    发表于 07-17 06:57

    Hadoop集群分布式的搭建步骤

    Hadoop集群分布式搭建
    发表于 11-04 09:19

    HarmonyOS应用开发-分布式任务调度

    TV的工程 准备密钥和证书请求文件 申请调试证书 应用开发具体操作,请按照《DevEcoStudio使用指南》中详细说明来完成。4. 代码编写分布式任务调用代码参考:Intent intent
    发表于 09-18 09:21

    鸿蒙分布式任务调度

    鸿蒙分布式任务调度,实现跨设备FA拉起
    发表于 06-12 17:28

    【学习打卡】OpenHarmony的分布式任务调度

    之前我们分享过分布式软总线和分布式数据管理,今天主要说一OpenHarmony的分布式任务调度,分布式
    发表于 07-18 17:06

    Spring Boot定时任务的重写方法

    Spring Boot应该是目前最火的java开源框架了,它简化了我们创建一个web服务的过程,让我们可以在很短时间、基本零配置就可以启动一个web服务。
    的头像 发表于 01-20 17:38 2216次阅读

    SpringBoot如何实现动态增删启停定时任务

    spring boot项目中,可以通过 @EnableScheduling 注解和@Scheduled注解实现定时任务,也可以通过SchedulingConfigurer接口来实现定时任务
    的头像 发表于 09-24 09:49 2596次阅读
    SpringBoot如何实现动态增删启停<b class='flag-5'>定时任务</b>

    Python定时任务的实现方式

    在日常工作中,我们常常会用到需要周期性执行的任务,一种方式是采用 Linux 系统自带的 crond 结合命令行实现。另外一种方式是直接使用Python。接下来整理的是常见的Python定时任务
    的头像 发表于 10-08 15:20 3225次阅读

    说说Spring定时任务如何大规模企业级运用

    定时任务是业务应用开发中非常普遍存在的场景(如:每分钟扫描超时支付的订单,每小时清理一次数据库历史数据,每天统计前一天的数据并生成报表等等),解决方案很多,Spring 框架提供了一种通过注解来配置定时任务的解决方案,接入非常的
    的头像 发表于 11-04 09:36 508次阅读

    Spring Boot中整合两种定时任务的方法

    框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具备这两个 Spring 中的定时任务实现策
    的头像 发表于 04-07 14:55 1242次阅读
    <b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>中整合两种<b class='flag-5'>定时任务</b>的方法

    Spring Boot中如何使用定时任务

    本文介绍在 Spring Boot 中如何使用定时任务,使用非常简单,就不做过多说明了。
    的头像 发表于 04-12 10:56 779次阅读

    如何动态添加修改删除定时任务

    如何动态添加修改删除定时任务?那么我们一起看看具体怎么实现,先看下本节大纲: (1)思路说明; (2)代码解析; (3)修改定时任务执行周期特别说明
    的头像 发表于 04-12 11:06 869次阅读

    python定时任务实践

    由于程序需求,监测配置变化需要设置定时任务,每分钟执行一次,对任务持久化要求不高,不需要时可以关闭定时任务
    的头像 发表于 05-20 17:53 778次阅读
    python<b class='flag-5'>定时任务</b>实践

    spring分布式框架有哪些

    Spring分布式框架。 Spring Cloud Spring Cloud是基于Spring Boo
    的头像 发表于 11-16 10:58 358次阅读