项目升级适配改造时遇到的问题,定时任务和crontab表达式理论上都是没有问题的,但实际测试验证时报错了
这里先推荐一个crontab执行时间计算工具:crontab时间计算
之前一直在使用bejson的Cron表达式校验工具,但是无法验证Quartz类型的cron语句
报错
java使用Quartz任务调用crontab表达式的时候报错:
Based on configured schedule, the given trigger will never fire
原因分析
通过使用cron表达式校验工具发现和日志对比分析发现,cron表达式设置的时间总是比执行时间提前,这就能解释问题了,执行时间超过了配置时间,那么配置的时间自然永远不会触发了
还是从代码入手,原来为了避免多个任务同时执行,把所有的定时任务选择了10秒 内的随机数前置了时间,但有的任务是设置当下立即执行,这个时候再前置时间就一定是不正确的
解决
一定要确保执行时间不要超过配置时间
当出现这个报错时,首先去验证一下配置时间和执行时间的先后顺序