`

115. Spring Boot 定时任务升级篇(集群/分布式下的定时任务说明篇)

阅读更多

 

    需求缘起:在发布了《Spring Boot定时任务升级篇》之后得到不少反馈,其中有一个反馈就是支持分布式吗,比如有8个实例,执行的时候会随机分配一个实例运行还是8个都会运行?在这节博客中没有办法完全解决这个问题,在这里抛砖引玉说明下。 看下本章大纲:

(1)回顾定时任务的实现方式;
(2)集群环境下的任务调度说明;
(3)Spring的Scheduled Task实现集群思路;
(4)Quartz实现集群思路;

 

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

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

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

JDK自带的Timer+TimerTask方式,

spring 3.0以后的调度任务(Scheduled Task)

Quartz等。

 

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

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

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

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

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

 

3SpringScheduled Task实现集群思路;

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

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

 

4Quartz实现集群思路;

   

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

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

 

       下节博客,我们介绍下,在Spring Boot中如何集成Quartz

 

à悟空学院:https://t.cn/Rg3fKJD

学院中有Spring Boot相关的课程!点击「阅读原文」进行查看!

SpringBoot视频:http://t.cn/A6ZagYTi

Spring Cloud视频:http://t.cn/A6ZagxSR

SpringBoot Shiro视频:http://t.cn/A6Zag7IV

SpringBoot交流平台:https://t.cn/R3QDhU0

SpringData和JPA视频:http://t.cn/A6Zad1OH

SpringSecurity5.0视频:http://t.cn/A6ZadMBe

Sharding-JDBC分库分表实战http://t.cn/A6ZarrqS

 

分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

分享到:
评论

相关推荐

    spring-boot 定时任务集群

    本篇文章将深入探讨如何在Spring Boot 2.1.6版本中配置和管理定时任务,并实现任务的集群部署以及任务的持久化存储到MySQL数据库。 **一、Spring Boot定时任务** 1. **@Scheduled注解**:Spring Boot提供了对定时...

    spring-boot示例项目

    基于这样的背景下,我开源了本示例项目,方便大家快速上手Spring Boot、Spring Cloud 。 每个示例都带有详细的介绍文档、作者在使用过程中踩过的坑、解决方案及参考资料,方便快速上手为你提供学习捷径,少绕弯路...

    spring boot 定时任务源码

    在Spring Boot框架中,定时任务是一项非常重要的功能,它允许开发者在特定的时间间隔执行特定的任务。Spring Boot通过集成Spring Framework的Task Execution和Scheduling模块,提供了便捷的方式来管理和执行定时任务...

    spring boot + quartz 动态管理 分布式

    总之,"Spring Boot + Quartz 动态管理 分布式"的主题涵盖了Spring Boot的快速开发特性,Quartz的定时任务调度能力,以及在分布式环境下的任务管理。通过学习和实践,开发者能够构建出一个灵活、健壮的定时任务系统...

    schedule-job, 基于Spring Boot Quartz 的分布式任务调度系统.zip

    本项目名为“schedule-job”,是基于Spring Boot框架与Quartz库构建的分布式任务调度系统,它允许开发者方便地定义、管理和执行定时任务。 【Spring Boot基础知识】 Spring Boot是由Pivotal团队提供的全新框架,其...

    Spring Boot 学习笔记完整教程.pdf

    9. Spring Boot任务调度:了解如何在Spring Boot中实现定时任务和异步任务。 10. Spring Boot集成测试:学习如何进行集成测试,包括使用JUnit和Mockito等工具。 11. Spring Boot热部署:了解热部署的原理,以及...

    SpringBoot集成Quartz分布式定时任务

    本篇文章将详细探讨如何在SpringBoot项目中集成Quartz实现分布式定时任务。 Quartz是一个开源的作业调度框架,它允许开发者定义定时任务并按计划执行。Quartz的核心概念包括Job(任务)、Trigger(触发器)和...

    基于Spring Boot框架的分布式任务管理系统.zip

    基于Spring Boot框架的分布式任务管理系统 内容概要 本项目是一个基于Spring Boot框架的分布式任务管理系统,旨在通过uwtask包快速构建分布式任务体系。系统支持定时任务、队列任务、RPC调用等多种任务类型,并...

    动态定时任务 SpringBoot quartz集群分布式。动态指定任意-demo-quartz-dynamic.zip

    本项目"动态定时任务 SpringBoot quartz集群分布式。动态指定任意-demo-quartz-dynamic.zip"正是这样一个示例,它展示了如何在SpringBoot应用中实现动态管理和调度Quartz定时任务,并且支持在分布式环境下运行。 ...

    SpringCloudSchedule定时任务

    在IT行业中,Spring Cloud Schedule是Spring Cloud框架的一个重要组件,用于构建分布式系统中的定时任务。本文将深入探讨如何使用Spring Cloud Schedule与MyBatis相结合,实现对MySQL数据库的读写操作,并设定按照...

    spring boot 全面的样例代码

    - chapter1:[基本项目构建(可作为工程脚手架),引入...由于Spring Cloud偏宏观架构,Spring Boot偏微观细节,内容上越来越多,为了两部分内容不互相干扰,所以迁移Spring Cloud内容到:[SpringCloud-Learning项目]...

    springboot整合quartz定时任务yml文件配置方式

    在Spring Boot应用中整合Quartz定时任务是一种常见的需求,它可以帮助我们执行周期性的后台任务,如数据同步、报表生成等。Spring Boot与Quartz的结合提供了便捷的配置方式,特别是通过YAML(YAML Ain't Markup ...

    (源码)基于Spring Boot和Vue的分布式集群管理系统.zip

    # 基于Spring Boot和Vue的分布式集群管理系统 ## 项目简介 本项目是一个基于Spring Boot和Vue框架的分布式集群管理系统,旨在提供一个高效、可扩展的后台管理系统。项目代码、文档均开源免费可商用,遵循开源协议...

    26.Spring Boot 服务的注册和发现.rar

    1、Spring Cloud是基于Spring Boot来实现的。 2、Spring Cloud是一系列工具框架的集合体。 3、Spring Cloud提供了一套完整的微服务解决方案。 16套Java架构师,集群,高可用,高可扩展,高性能,高并发,性能优化,...

    SpringBoot 整合Quartz(集群)实现定时任务调度

    SpringBoot整合Quartz实现定时任务调度是企业级应用中常见的需求,主要用于自动化执行某些周期性的任务,例如数据备份、报表生成、系统维护等。Quartz是一个功能强大的开源作业调度框架,能够灵活地定义任务和调度...

    spring boot+redis单机与集群.zip

    本压缩包文件包含的是关于如何在Spring Boot项目中集成和配置Redis,以及如何设置Redis的单机和集群模式的教程或示例代码。 首先,让我们详细了解一下Spring Boot集成Redis的基础知识。Spring Boot提供了自动配置的...

    springboot整合spark连接远程服务计算框架使用standAlone模式

    在现代大数据处理领域,Spark作为...在Standalone模式下,我们可以方便地在Spring Boot应用中启动和管理Spark任务,进行远程服务计算。这种方式为开发者提供了灵活性和便利性,便于在微服务架构中嵌入大数据处理能力。

    Java 实现分布式定时任务

    在Java开发中,分布式定时任务是一项关键功能,它允许系统在预定的时间执行特定的任务,而分布式则意味着这些任务可以在多台机器上同时进行,以提高效率和容错性。本篇将深入探讨如何使用Java来实现这样的功能。 一...

    Spring Boot和Hazelcast使用详解

    Spring Boot和Hazelcast使用详解 Spring Boot和Hazelcast使用详解是指如何将Hazelcast集成到Spring Boot项目中,以提高应用程序的性能。Hazelcast是一个内存分布式计算平台,用于管理数据并并行执行应用程序。它...

    37. Spring Boot集成EHCache实现缓存机制【从零开始学Spring Boot】

    EHCache支持两种缓存模式:本地缓存(适用于单节点应用)和分布式缓存(适用于多节点集群)。 **集成步骤**: 1. **添加依赖**:在`pom.xml`中添加EHCache和Spring Boot对EHCache的支持依赖。 ```xml <groupId>...

Global site tag (gtag.js) - Google Analytics