Quartz 定时任务
Quartz部署了多个节点,为啥总是在特定节点执行
- Quartz集群
使用数据库来进行集群的管理
QRTZ_SCHEDULER_STATE 表用来存储各个实例,如下:前两个是运行在同一台Linux上的两个jar包。第三个是运行在一台windows上的jar包。
其中last_checkin_time是每个实例,自己报告的最后时间。
实例在更新自己的last_checkin_time时还会监测其他节点的,如果其他节点在last_checkin_time+last_checkin_tim<System.currentTimeMillis() 当前时间,说明这个节点已经超时未汇报自己的健康状态,此节点可能已经挂掉了
故障恢复:
如果故障节点有执行的任务,那么需要恢复故障任务。如果没有,那么就简单了。直接删除QRTZ_SCHEDULER_STATE的实例即可
注意:各个节点的时间应该同步,否则会出现错误判断的情况。
Quartz采用随机算法。Quartz官网上提到当前,还不存在一个方法来指派(钉住) 一个 Job 到集群中特定的节点。
- 任务的执行
QRTZ_TRIGGERS和QRTZ_FIRED_TRIGGERS是两张存储Trigger调度的表
多个实例是靠next_file_time 和 trigger_state来抢夺执行实例。如果多个实例的服务器时间是同步的,那么理论上在两个实例上执行的概率是随机的。实际情况是50.240上Centos系统的时间慢2分钟。这样,也似乎解释了。为啥一旦开启了别的实例。从来没有在Centos上执行过。
如下:
实例A,在QRTZ_TRIGGER表里面查询:条件是,到了next_fire_time并且trigger_state是WAITING的,一旦获取到,就把状态改成ACQUIRED。这样相当于该实例抢占成功。其他实例就无法获取到这条数据了。并且插入qrtz_fire_trigger一条数据,起始状态为ACQUIRED,qrtz_fire_trigger记录。这个表可以理解为正在执行的任务。会记录instance_name。可以知道具体哪个实例在运行
任务执行完成后,在一个事务中触发器状态更新为WAITING,删除FIRED_TRIGGERS表里对应的记录。
- 表汇总
QRTZ_BLOB_TRIGGERS 自定义的triggers使用blog类型进行存储
QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calendar 信息
qrtz_corn_triggers:记录cornTrigger的信息。
qrtz_fired_triggers:记录每个正在执行的触发器。
qrtz_job_details:记录每个任务的详细信息。
qrtz_locks:记录程序的悲观锁(防止多个节点同时执行同一个定时任务)。
QRTZ_PAUSED_TRIGGER_GRPS 存储已暂停的 Trigger 组的信息
qrtz_scheduler_state:记录 调度器(每个机器节点)的生命状态。
QRTZ_SIMPLE_TRIGGERS 存储简单的trigger,包括重复次数,间隔,以及触发次数
QRTZ_SIMPROP_TRIGGERS 存储CalendarIntervalTrigger和DailyTimeIntervalTrigger两种类型的触发器
qrtz_triggers:记录每个触发器的详细信息。
qrtz_locks存储程序的悲观锁的信息(假如使用了悲观锁)
Quartz提供的锁表,为多个节点调度提供分布式锁,实现分布式调度,默认有2个锁:
STATE_ACCESS主要用在scheduler定期检查是否有效的时候,保证只有一个节点去处理已经失效的scheduler。
TRIGGER_ACCESS主要用在TRIGGER被调度的时候,保证只有一个节点去执行调度。
定时任务就是向triggers和job表里面按规则写入数据。
Quartz 定时任务相关推荐
- quartz定时任务开发cron常用网站
http://cron.qqe2.com/ cron表达式 只能看下5个时点 http://www.cronmaker.com/ 能看500个时点 https://unixtime.5 ...
- 大数据互联网架构阶段 QuartZ定时任务+RabbitMQ消息队列
QuartZ定时任务+RabbitMQ消息队列 一 .QuartZ定时任务解决订单系统遗留问题 情景分析: 在电商项目中 , 订单生成后 , 数据库商品数量-1 , 但是用户迟迟不进行支付操作 , 这 ...
- Quartz定时任务的基本搭建
前言 个人地址:Quartz定时任务的基本搭建 Quartz是一个完全由Java编写的开源作业调度框架,为在java应用程序中进行作业调度提供了简单又强大的机制. Quartz中分为几个核心概念: J ...
- 记一次quartz定时任务不执行排雷
过程 项目中需求统计数据,涉及大屏展示,展示的数据很复杂,所以采取了晚上把数据汇总出来存到redis缓存,供白天查询的方式. 用到了quartz定时任务,写好sql.逻辑等测试没问题,就愉快的部署到了 ...
- Quartz定时任务-@DisallowConcurrentExecution注解
Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞. 在Spring中这时需要设置concurrent ...
- bboss quartz定时任务使用案例介绍
bboss quartz定时任务使用案例介绍 本文demo gradle工程源码地址: [url]https://github.com/bbossgroups/quartzdemo[/url] [si ...
- Quartz定时任务使用小记(11月22日)
骤然接触quartz,先从小处着手,why,what,how quartz定时任务: 为什么使用quartz定时任务,以及定时任务在实际应用场景下的特定需求. 1.用户方面的需要,为了提供更好的使用体 ...
- Springboot 使用quartz 定时任务 增删改查
前段时间公司项目用到了 定时任务 所以写了一篇定时任务的文章 ,浏览量还不错 , Springboot 整合定时任务 ) 所以就准备写第二篇, 如果你是一名Java工程师,你也可以会看到如下的页面 , ...
- quartz定时任务不执行
quartz定时任务执行一段时间不执行的原因 数据库表QRTZ_TRIGGERS 里的TRIGGER_STATE 字段的值自动修改为ERROR了 ,quartz定时任务是不扫描这种ERROR情况. 之 ...
- Spring Boot配置Quartz定时任务
1 Quartz定时任务 Quartz 是一个完全由 Java 编写的开源任务调度框架,为在 Java 应用程序中进行任务调度提供了简单却强大的机制. 基于定时.定期的策略来执行任务是它的核心功能,比 ...
最新文章
- 2019年衡水中学高考喜报
- CrowdRec:众包环境中,基于信任感知的工人推荐
- html中after伪类原理,css伪类before跟after原理与使用(原)
- SAP中凭证类型的作用
- linux mysql 停止,linux 里 重启 和停止 mysql的原理
- 这是东西:jUnit:动态测试生成
- BUUOJ reverse 不一样的flag
- 前向星及spfa大法
- 在RedHat Enterprise Linux 上Oracle 9i的安装配置与调优
- linux技巧33条
- vs2010 c++项目创建简易教程
- 将iPhone投影到Mac上
- 微信获取open ID
- 【andriod】设备APP开发之数据就地Excel存储
- android 自动背光闪烁,Android 背光流程小结
- 使用sh执行bash脚本的奇怪问题
- krpano资源下载及还原全景图
- c调python_C调和弦及组成音
- 苹果首席设计师艾维将离职开办新公司 还会开发苹果产品
- 全程软件测试之测试需求分析与计划(1)