Quartz 如何将触发器置于不会重新触发失火的状态
Quartz How do I put triggers in a state where they wont re-fire a misfire
我的 Web 应用程序有一个有趣的问题。我们最近遇到了一个巨大的并发问题,Quartz 同时在数百个线程中触发相同的 java class 导致数据库争用并完全锁定我们的应用程序。在我们能够解决潜在问题之前,我必须在数据库 table qrtz_triggers 上将所有 misfire_instr 设置为“1”(不要重新触发失火)以获取应用程序出现并为正常流量提供服务。然后我们手动缓慢地解雇错过的计划以避免并发问题。
我已修复并发问题并准备好热部署我们的应用程序,但担心如果我将 misfire_instr 设置回 2(重新启动失败),错过的计划将重新启动再次基于 prev_fire_time?
建议的解决方案 - 将 prev_fire_time 设置为 next_fire_time 之前的几分钟,这样它就认为最后的时间表已经结束。如果 prev_fire_time 早于 cron 表达式表示的最后时间,我的假设是否正确?
我还看到尚未 运行 的时间表在列中有 -1,这是新时间表的默认值吗,也许我应该改用这个值?
由于我们需要它立即进入,我决定试试运气,使用 -1 作为 prev_fire_time 值(并将触发器更新回 2)。这按预期工作。
我的 Web 应用程序有一个有趣的问题。我们最近遇到了一个巨大的并发问题,Quartz 同时在数百个线程中触发相同的 java class 导致数据库争用并完全锁定我们的应用程序。在我们能够解决潜在问题之前,我必须在数据库 table qrtz_triggers 上将所有 misfire_instr 设置为“1”(不要重新触发失火)以获取应用程序出现并为正常流量提供服务。然后我们手动缓慢地解雇错过的计划以避免并发问题。
我已修复并发问题并准备好热部署我们的应用程序,但担心如果我将 misfire_instr 设置回 2(重新启动失败),错过的计划将重新启动再次基于 prev_fire_time?
建议的解决方案 - 将 prev_fire_time 设置为 next_fire_time 之前的几分钟,这样它就认为最后的时间表已经结束。如果 prev_fire_time 早于 cron 表达式表示的最后时间,我的假设是否正确?
我还看到尚未 运行 的时间表在列中有 -1,这是新时间表的默认值吗,也许我应该改用这个值?
由于我们需要它立即进入,我决定试试运气,使用 -1 作为 prev_fire_time 值(并将触发器更新回 2)。这按预期工作。