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

    文章

    338

    浏览量

    14301
  • Boot
    +关注

    关注

    0

    文章

    149

    浏览量

    35766
收藏 人收藏

    评论

    相关推荐

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

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

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

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

    Hadoop集群分布式的搭建步骤

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

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

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

    Spring Boot定时任务的重写方法

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

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

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

    Python定时任务的实现方式

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

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

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

    xxl-job任务调度中间件解决定时任务的调度问题

    xxl-job是一款非常优秀的任务调度中间件,轻量级、使用简单、支持分布式等优点,让它广泛应用在我们的项目中,解决了不少定时任务的调度问题。
    的头像 发表于 01-31 09:53 1804次阅读

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

    框架 Quartz ,Spring Boot 源自 Spring+SpringMVC ,因此天然具备这两个 Spring 中的定时任务实现策
    的头像 发表于 04-07 14:55 1509次阅读
    <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 944次阅读

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

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

    spring分布式框架有哪些

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

    springclould分布式教程

    Spring Cloud是一个基于Spring Boot分布式系统开发工具,它提供了一系列的分布式系统解决方案,可以帮助开发者快速构建和部
    的头像 发表于 11-16 10:59 469次阅读

    springcloud如何实现分布式

    Spring Cloud是基于Spring Boot开发的一套分布式系统解决方案,它主要包括了多个子项目,如服务注册与发现、配置中心、负载均衡、断路器、路由等等。通过使用
    的头像 发表于 11-16 11:01 644次阅读