springboot和quartz整合分布式多节点

君临-行者无界      2022-04-13     615

关键词:

  虽然单个Quartz实例能给予我们很好的任务job调度能力,但它不能满足典型的企业需求,如可伸缩性、高可靠性满足。假如你需要故障转移的能力并能运行日益增多的 Job,Quartz集群势必成为你应用的一部分了。使用 Quartz 的集群能力可以更好的支持你的业务需求,并且即使是其中一台机器在最糟的时间挂掉了也能确保所有的 Job 得到执行。一个 Quartz 集群中的每个节点是一个独立的 Quartz 应用,它又管理着其他的节点。也就是你必须对每个节点分别启动或停止。不像许多应用服务器的集群,独立的Quartz 节点并不与另一其的节点或是管理节点通信。Quartz 应用是通过数据库表来感知到另一应用的。

  Quartz集群配置很简单,本篇配置基于我的上一篇文章https://www.cnblogs.com/hhhshct/p/9707710.html,只需要更改下quartz.properties即可,如下:

org.quartz.scheduler.instanceName = schedulerFactoryBean
#调度器编号自动生成,集群中编号不可以重复,所以最好设成auto
org.quartz.scheduler.instanceId = AUTO

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate

org.quartz.jobStore.tablePrefix = QRTZ_
#开启分布式部署
org.quartz.jobStore.isClustered = true
#分布式节点有效性检查时间间隔,单位:毫秒
org.quartz.jobStore.clusterCheckinInterval = 10000

org.quartz.jobStore.useProperties = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount = 10

org.quartz.threadPool.threadPriority = 5

#配置是否启动自动加载数据库内的定时任务,默认true
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

  启动项目,端口号8081,作为第一个实例,可以看到之前我们加入的定时任务开始执行,修改端口号为8082,再启动项目,作为第二个实例,可以看到没有定时任务执行,然后我们手动down掉第一个实例,可以发现定时任务漂移到了我们的第二个实例,这样就避免了单点故障而造成定时任务不执行的问题。

  Quartz一点都不明确你是在同一台机器上运行所有节点,还是在不同的机器上运行所有节点。当集群是放置在不同的机器上时,我们称之为水平集群。如果所有节点是跑在同一台机器的时候,我们称之为垂直集群。对于垂直集群,存在着单点故障的问题。这对高可用性的应用来说是个坏消息,因为一旦机器宕掉了,所有的节点也就被有效的终止了。而当你运行水平集群时,一个严格的要求就是我们的时钟时间必须要同步,以免出现离奇且不可预知的行为。假如时钟没能够同步,Scheduler 实例将对其他节点的状态产生混乱,造成难以估计得麻烦。至于如何解决这个问题,后续遇到再做研究了。

springboot2整合elasticjob框架,定制化管理流程

本文源码:GitHub·点这里||GitEE·点这里一、ElasticJob简介1、定时任务在前面的文章中,说过QuartJob这个定时任务,被广泛应用的定时任务标准。但Quartz核心点在于执行定时任务并不是在于关注的业务模式和场景,缺少高度自定义的... 查看详情

springboot整合quartz项目使用(含完整代码)(代码片段)

前言:quartz是一个定时调度的框架,就目前市场上来说,其实有比quartz更优秀的一些定时调度框架,不但性能比quartz好,学习成本更低,而且还提供可视化操作定时任务。例如xxl-Job,elastic-Job这两个算... 查看详情

springboot定时任务quartz整合(多数据源+quartz持久化到数据库)(代码片段)

...数据源参数,调用相应的service或mapper方法。(1条消息)Springboot整合多数据源(自定义注解+aop切面实现)_明湖起风了的博客-CSDN博客quartz:通过serviceImpl实现类实现核心业务逻辑(添加、暂停、修改任务等ÿ... 查看详情

springboot整合任务系统(quartz和springtask)(代码片段)

...学生,希望在这里和各位一起学习。所属专栏:SpringBoot学习笔记文章创作不易,期待各位朋友的互动,有什么学习问题都可在评论区留言或者私信我,我会尽我所能帮助大家。SpringBoot整合任务系统​这里说的... 查看详情

springboot整合quartz

1、创建    一、SpringBoot整合Quartz引入SpringBoot的基础依赖   1、引入依赖     2、编写简单任务类 3、创建任务调度类  4、创建任务调度方法  5、编写触发方式 fixedDe... 查看详情

springboot整合quartz遇到的错误

1、springboot整合quartz执行多个定时任务时报:org.quartz.ObjectAlreadyExistsException:UnabletostoreJob:‘group1.job1‘,becauseonealreadyexistswiththisidentification.定时任务虽然执行,但报了错误。第一次执行时没有报错误,第二次及之后执行前会报这个... 查看详情

springboot应用系列6--springboot2整合quartz

...bsp;Scheduler(调度器):负责Job的执行。有两种方式可以实现SpringBoot与Quartz的整合:一、使用Spring 查看详情

springboot整合xxl-job分布式定时任务图文完整版

一、前言定时任务有很多种,有一些大的框架也有一些简单的实现。比如常见的:JDK的​​Timer和TimerTask​​​​Quartz​​异步任务调度框架分布式定时任务​​XXL-JOB​​SpringTask注解​​@Scheduled​​小编也就知道这些,欢迎大... 查看详情

springboot整合quartz

参考技术A写在前面:本项目环境springboot+springdatajpaQuartz核心概念:Job表示一个工作,要执行的具体内容。此接口中只有一个方法,如下:voidexecute(JobExecutionContextcontext)JobDetail表示一个具体的可执行的调度程序,Job是这个可执行... 查看详情

kafkakafka核心使用和springboot整合(代码片段)

Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:... 查看详情

springboot的其他整合相关

springBoot的事物管理1:springBoot整合单数据源事物:  springboot默认集成事物,只主要在方法上加上@Transactional即可 标签:@Transactional    2:springBoot整合多数据源分布式事物:使用springboot+jta+atomikos 分布... 查看详情

springboot整合quartz定时器

概述  项目需要定时器的调度管理,原来使用SpringBoot自带的定时器,但是不能后台动态的操作暂停、启动以及新增任务等操作,维护起来相对麻烦;最近研究了Quartz的框架,觉得还算不错,整理了一下代码,整合到现有系统... 查看详情

springboot整合redisson使用分布式锁,模拟茅台抢购场景

SpringBoot整合Redisson使用分布式锁,模拟茅台抢购场景一、前言介绍二、项目Demo2.1.Demo下载地址2.2.模拟用户抢购2.2.1.将库存缓存到redis2.2.2.JMeter设置线程数:2.2.3.JMeter设置http请求:2.2.4.调用结果三、POM依赖四、配置类&#... 查看详情

springboot整合quartz实现定时任务

依赖包1<dependency>2<groupId>org.quartz-scheduler</groupId>3<artifactId>quartz</artifactId>4</dependency>5<dependency>6<groupId>org.springframework</gro 查看详情

quartz-springboot2.1.5整合(代码片段)

 一.整合的步骤建立springboot工程映入相关依赖导入quartz的tables_mysql_innodb.sql文件到数据库中建立中间数据控制表建立Job工厂类建立任务Trigger触发器监听类建立业务控制处理类项目重启重置任务处理配置quartz参数二.详细描述建... 查看详情

springboot整合quartz集群环境实现动态定时任务配置原

最近做了一个springboot 整合quartz 实现动态定时任务配置,在集群环境下运行的任务。能够对定时任务,动态的进行增删改查,界面效果图如下:   1.在项目中引入jar 2.将需要的表导入数据库 官网上有不... 查看详情

springboot(整合事务和分布式事务)

  springboot+mybatis单数据源,事务事务:简单理解指的是一组操作,里面包含许多个单一的逻辑,只要有一个逻辑没有执行成功,那么都算失败。所有的数据都回归到最初的状态(回滚)代码实例:@RequestMapping("/testTranSctiona... 查看详情

springboot之整合quartz调度框架-基于springboot2.0.2版本

1.项目基础项目是基于SpringBoot2.x版本的  2.添加依赖<!--quartz依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId&g 查看详情