最近在正式环境新增了一个定时任务,项目启动后,新增的任务总是跑一两次就不跑了,排查发现trigger_state变为ERROR了。
一、Quartz重要表含义
1)qrtz_calendars:以Blob类型存储Quartz的Calendar日历信息, quartz可配置一个日历来指定一个时间范围。
2)qrtz_cron_triggers:存储Cron Trigger,包括Cron表达式和时区信息。
3)qrtz_fired_triggers:存储已经触发的trigger相关信息,trigger随着时间的推移状态发生变化,直到最后trigger执行完成,从表中被删除。
4)qrtz_job_details:存储每一个已配置的Job的详细信息。
5)qrtz_scheduler_state:存储少量的有关 Scheduler的状态信息,和别的 Scheduler 实例(假如是用于一个集群中)。
6)qrtz_simple_triggers:存储简单的 Trigger,包括重复次数,间隔,以及已触的次数。
7)qrtz_triggers:存储已配置的 Trigger的信息。
二、任务查询
查询qrtz_job_details、qrtz_triggers、qrtz_cron_triggers这三张表即可查到对应定时任务信息。
三、原因分析
1、任务启动后可以正常跑完一次,且在测试时代码正常运行,说明代码是没有问题的;
2、通过更改qrtz_triggers表trigger_state状态为WAITING和next_fire_time(下次触发时间)让任务执行后,一段时间后,trigger_state又变成ERROR,且只有新增任务式这样,其他定时任务都可以正常跑,确定问题出在新的任务上;
3、检查qrtz_scheduler_state表查看是否存在多条记录,如果有多条,只留一条;
4、检查集群环境,或者查看是否有其他环境也和正式环境共用一个数据库,检查后发现,有个备用服务器,并未配置负载均衡,但是用的是正式数据库且上面的应用为启动状态,检查服务器上部署的应用发现服务器上的包并未更新,这个包并不包含新增的任务,关掉备用服务器,发现正式环境上的任务可以正常运行了。
注:
查看任务下次触发时间

select qt.*,to_date('1970-01-01 08:00:00', 'yyyy-mm-dd hh24:mi:ss') +qt.next_fire_time / 1000 / 24 / 60 / 60 nextFireTime,sysdate
from qrtz_triggers qt

问题总结:
使用quartz集群模式时,若集群节点中应用服务器打的包版本不一致或者其他服务器用非最新版本包且与正式环境共用一个数据库时,就会出现qrtz_triggers表trigger_state变ERROR情况,从而导致定时任务不能正常运行。究其原因quartz执行任务调度是根据数据库表中的记录执行的,如果执行到没有对应代码的节点时,trigger_state就会变成ERROR。

quartz集群模式下qrtz_triggers表trigger_state变ERROR分析相关推荐

  1. quartz集群模式任务触发分析(二)

    前言 此处仅大致的将quartz的逻辑给理出来,有些具体的详细之处我也不是很清楚(苦笑) QuartzSchedulerThread quartzSchedulerThread是quartz的主线程, ...

  2. strom-1.1.0模拟单词统计功能,Spout编写,Bolt编写,TopologyDriver编写,本地模式运行,集群模式运行,集群模式下看输出结果

    统计文本中的单词出现的频率,其中文本内容如下: 创建项目 项目结构如下: 创建pom.xml,代码如下: <?xml version="1.0" encoding=" ...

  3. RSF-Center,集群模式下-协调数据结构

    为什么80%的码农都做不了架构师?>>>    RSF是一个轻量化的分布式服务框架.支持点对点调用,也支持分布式调用.典型的应用场景是,将同一个服务部署在多个Server上提供 re ...

  4. 如何访问集群中指定的服务器,【Nacos源码之配置管理 六】集群模式下服务器之间是如何互相感知的...

    前言 我们用Nacos当配置中心的时候,上一篇文章中 [Nacos源码之配置管理 五]为什么把配置文件Dump到磁盘中 知道了,所有的配置文件都会Dump到服务器的本地磁盘中, 那么集群模式下: 服务 ...

  5. 关于Redis集群模式下,使用mget通过keys批量获取value时的解决方案

    关于Redis集群模式下,使用mget通过keys批量获取value时的解决方案 今天在做项目的时候,需要使用到mget命令,通过一个批量的key去获取对应的value集合,但是取值的时候,报了这个错 ...

  6. zookeeper专题:zookeeper集群模式下,leader选举流程分析

    文章目录 Zookeeper 集群模式一共有三种类型的角色 1. zookeeper启动时leader选举流程 1.1 加载配置文件,设置基本信息 1.2 指定快速选举算法,启动多级队列.线程 1.3 ...

  7. redis分布式锁 在集群模式下如何实现_收藏慢慢看系列:简洁实用的Redis分布式锁用法...

    在微服务中很多情况下需要使用到分布式锁功能,而目前比较常见的方案是通过Redis来实现分布式锁,网上关于分布式锁的实现方式有很多,早期主要是基于Redisson等客户端,但在Spring Boot2. ...

  8. Hadoop框架:集群模式下分布式环境搭建

    本文源码:GitHub·点这里 || GitEE·点这里 一.基础环境配置 1.三台服务 准备三台Centos7服务,基础环境从伪分布式环境克隆过来. 133 hop01,134 hop02,136 ...

  9. rocketMq双master集群模式下故障演练

    在上一篇,我们简单搭建了rocketMq双master的集群,沿用这个思路,这一篇我们用代码来模拟一下rocketMq集群故障情况下完成自动切换的效果. 1.启动两个节点的broker和nameser ...

最新文章

  1. 标准自编码器(TensorFlow实现)
  2. CGpoint,CGSize,CGRect,NSRange
  3. 论新时代软件测试人员的工作之道(一)之一个故事
  4. 人脸识别,现在连动漫角色都不放过
  5. gcc build a project
  6. 打造炫酷通用的ViewPager指示器 Adapter模式适配所有 1
  7. dtft变换的性质_[2018年最新整理]DTFT变换.ppt
  8. openpyxl 列 插入_openpyxl 基本使用
  9. 苹果有益让老iPhone变慢以迫使消费者购买新一代的iPhone?
  10. QuickPart : 用户控件包装器 for Office SharePoint Server 2007
  11. Aras Innovator-学-习-之-旅-
  12. 短网址还原 php,PHP将微博短地址还原为实际网址
  13. Android 隐藏 返回键 Home键 隐藏最下面的NAVIGATION栏
  14. 小程序学习笔记5---导航跳转
  15. 数据库数据采集利器FlinkCDC
  16. mysql 瘦身_Mysql瘦身方法
  17. 2021年秋招简历:张宁宁-硕士-苏州大学-信息与通信工程
  18. 李炎恢ECMAScript6 / ES6+(二)
  19. python控制台中怎么控制开始和结束_Python-基础篇之控制台编程 - 随笔分类 - 梦并不遥远 - 博客园...
  20. IDEA2022.1创建maven项目,规避idea2022新建maven项目卡死,无反应问题

热门文章

  1. Linux中查看压缩包的内容,linux中肿么查看压缩包中的内容
  2. docker架构的详解
  3. 振弦传感器及核心VM系列振弦采集模块
  4. 面渣逆袭:RocketMQ二十三问
  5. 台式计算机主板检测与维修,台式电脑主板故障怎么回事 台式电脑主板故障原因及诊断方法...
  6. 组网胖模式_胖瘦AP组网优劣对比
  7. github.com/gogo/protobu: invalid pseudo-version: revision is shorter than canonical
  8. thinkphp6教程笔记
  9. 11款面向Linux系统的备份工具,超实用!
  10. 2023届秋招前端总结面试题