栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

quartz

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

quartz

主线程:QuartzSchedulerThread
1 获取trigger
next_fire_time时间范围:起始: 当前时间-misfireThreshold(60s), 终止:当前时间+idleWaitTime(30s)+timeWindow(0)
状态:waiting
批次大小:maxBatchSize(1)
排序:next_fire_time 增序,即一般取next_fire_time最小的那条
注意:若misfire_instr=-1(ignore),则不加起始时间判断,即ignore的trigger不管时间多早都由主线程处理

2 trigger状态由waiting改为acquired

注意:1和2有可能在加锁中完成,需配置开启(默认关闭,job开启了)或maxBatchSize>1
一般来说,不加锁也没多大问题,即便不同机器拿到同一trigger,只会有一台能从waiting改为acquired
但是极限情况下某台获取trigger到改状态之间,另外一台完成了waiting-acquired-waiting的改变,可能导致重复调用

3 加锁修改trigger状态为waiting和时间更新
prev_fire_time 设置为原next_fire_time, next_fire_time计算出来

4 执行任务:提交到线程池执行,job使用的是50线程的SimpleThreadPool
提交任务可能会一直等待直到线程池有空余线程

注意事项:
1 如果获取到的首个trigger还未到触发时间,quartz会等待,所以当maxBatchSize=1任务不会提前触发
但maxBatchSize>1, 有很可能导致任务提前触发,所以maxBatchSize>1+idleWaitTime设置小点+能容忍轻微的提前触发 也是一种组合
2 注意除了triggers表外,从调度开始到执行完成fired_triggers也会存在记录,记录有executing状态

misfire:针对next_fire_time在当前时间-misfireThreshold之前且状态为waiting的trigger进行处理
处理时机:MisfireHandler线程定时处理,启动时,resumeTrigger时
misfire_instr:
-1(ignore): 不处理,由主线程处理
0(smart,默认):CronTrigger中为1
CronTrigger: 1(fire_once_now):next_fire_time设置为当前时间,即会被立即触发一次
CronTrigger: 2(do_nothing, job为2):以当前时间为基准计算next_fire_time并设置
SimpleTrigger的数字暂时不列举

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/271590.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号