spring quartz 部分定时任务不执行问题定位修复方案
Quartz部分定时任务不执行问题分析过程及修复方案 背景: 2021年1月7号上线迁移需求之后,出现最为明显的 众帮文件上传 其他部分定时任务也不执行的情况 执行时间并没有按照约定时间去执行 分析1 怀疑是代码问题? 对众帮文件上传定时任务代码进行排查 并无发现编码问题,并且对1月7号上的版本 和上一个版本进行代码比对 并未发现对众邦的代码有所改动的地方 分析2 项目定时任务框架 spring quartz 内部任务存储 调度问题? Quartz 是基于RAMJobStore调度中心去调度的,里面有Job(任务),Trigger(触发器)。 通过对项目定时任务代码的了解 及源码的分析 得知: 项目启动时 会把applicationContext-quartz.xml配置文件中的所有定时任务加载到jobDefinitions 这个队列中,遍历jobDefinitions 把每个定时任务的 job 和 Trigger获取到,通过Quartz API 把定时任务添加到RAMJobStore, 经过对jobDetail的校验 ,这里主要是校验name,group,jobClass 是否为空,然后jobDetail的下次触发时间是否合法 然后添加到RAMJobStore(JobWrapper, TriggerWrapper)中。 秉着这一逻辑思想 1月14号上线 项目重启后 拉取项目