`

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、Spring Cloud 。 每个示例都带有详细的介绍文档、作者在使用过程中踩过的坑、解决方案及参考资料,方便快速上手为你提供学习捷径,少绕弯路...

    spring boot 全面的样例代码

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

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

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

    spring-cloud使用的各种示例

    - [spring-boot-admin-eureka](https://github.com/ityouknow/spring-cloud-examples/tree/master/spring-boot-admin-eureka): 使用Spring Boot Admin 对Spring Cloud集群进行监控示例 - [spring-cloud-consul]...

    Spring Boot 2.X、Spring Cloud、Spring Cloud Alibaba、Dubbo、分布式.zip

    Spring Boot 专栏 基于 Spring Boot 2.X 版本的深度入门教程。 市面上的 Spring Boot 基础入门文章很多,但是深度入门文章却很少。对于很多开发者来说,入门即是其对某个技术栈的最终理解,一方面是开发者“比较懒...

    Spring boot,springCloud精选视频教程

    15.Spring Cloud中Hystrix仪表盘与Turbine集群监控 16.Spring Cloud中声明式服务调用Feign 17.Spring Cloud中Feign的继承特性 18.Spring Cloud中Feign配置详解 19.Spring Cloud中的API网关服务Zuul 20.Spring ...

    SpringBoot微服务架构应用

    Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种...

    一款基于 Spring Boot Starter 机制的分布式锁框架

    Spring Boot Starter 机制的分布式锁框架,实现了redis和zookeeper两种模式的分布式锁功能,以注解的方式(@RLock和@ZLock)对方法进行加锁操作,零代码实现业务加锁能力,涵盖各种加锁方式,并支持redis和zookeeper的集群...

    基于 Spring Boot 2.X 版本的深度入门教程

    一个涵盖六个专栏:Spring Boot 2.X、Spring Cloud、Spring Cloud Alibaba、Dubbo、分布式消息队列、分布式事务的仓库。基于 Spring Boot 2.X 版本的深度入门教程。快速学会 SpringMVC API 接口的编写的同时,我还想...

    单点登录源码

    | ├── zheng-cms-job -- 消息队列、任务调度等[端口:2223] | └── zheng-cms-web -- 网站前台[端口:2224] ├── zheng-pay -- 支付系统 | ├── zheng-pay-common -- pay系统公共模块 | ├── zheng-pay-dao...

    想学习的看过来了spring4.0、springboot、springcloud详细视频课程(硅谷)

    35.硅谷学习_SpringCloud_自定义Ribbo的负载均衡策略(下) 36.硅谷学习_SpringCloud_Feign是什么 37.硅谷学习_SpringCloud_Feign工程构建 38.硅谷学习_SpringCloud_Hystrix断路器是什么 39.硅谷学习_SpringCloud_...

    spring cloud+mybatis 案例.rar_mybatis_spring boot_spring cloud_微服务

    他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是,跟spring boot框架一起使用的话,会让你开发微服务架构的...

    本科毕设-基于spring-boot+java实现的一个云笔记系统源码+项目说明.7z

    本科毕设_基于spring-boot+java实现的一个云笔记系统源码+项目说明.7z Hoshi-Note 是一个云笔记系统,由 Hoshi-UI 模块提供前端界面。 基于 Spring Boot 与 Spring Cloud 开发,采用微服务及分布式模式部署,集群...

    基于spring boot的spring cloud 开源框架

    他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是, 跟spring boot框架一起使用的话,会让你开发微服务架构的...

    springboot基于redis分布式锁

    SpringBoot基于redis的分布式锁,有word使用文档,根据文档配置即可使用

    spring-boot集成quartz实现动态任务管理,支持集群

    spring-boot集成quartz实现动态任务管理,采用数据库存储方式,建表语句已经打包在一起,支持分布式集群。 代码开箱即用,没有集成业务模块,大家可以根据自己的业务场景自己去实现Job类即可。

    Job Plus项目是基于SpringBoot+Vue的轻量级定时任务管理系统+源代码+文档说明

    30. 一致性:基于Redis分布式锁保证集群分布式调度的最终一致性, 一次任务调度只会触发一次执行; 31. 全异步:任务调度流程全异步化设计实现,如异步调度、异步运行、异步回调等,有效对密集调度进行流量削峰,理论...

    若依通用权限管理系统接口文档,是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring

    在线定时任务配置;支持集群,支持多数据源,支持分布式事务。Spring Boot是一款开箱即用框架,提供各种默认配置来简化项目配置。让我们的Spring应用变的更轻量化、更快的入门。 在主程序执行main函数就可以运行。你...

    基于 redlock的java支持redis的唯一实现支持多实例集群的分布式锁

    支持多实例集群,分布式锁,spring cache 整合,session集群,消息队列,对象存储。redisson是java支持redis的redlock的唯一实现, 集成该项目后只需要极少的配置.就能够使用redisson的全部功能. 目前支持 集群模式,云托管...

    深入浅出SpringCloud视频课程 源码

    其对于Spring Cloud的最常用的注册中心、服务提供者及消费者、服务调用OpenFeign、Hystrix监控、服务网关gateway、消息驱动的微服务Spring Cloud Stream、分布式集群及分布式配置中心等都使用案例进行了说明,使得...

Global site tag (gtag.js) - Google Analytics