我正在寻找一种以编程方式模拟或强制触发失火的方法。这是场景:
我有一个工作集要触发,但该工作需要一些可能有时不可用的底层资源。如果资源不可用,我希望Quartz稍后根据失火策略重新触发触发器。
我已经探索了两个相似但不完全正在寻找的选项:
我缺少任何想法或任何东西?谢谢!
答案 0 :(得分:0)
如果我做对了,你不需要强制或模拟失火,因为资源可用性“你的工作可以处理的东西”。
失火存在,并由Quartz管理,以防止服务器关闭或其他“意外问题”阻止作业执行。
您可以通过两个选项来实现简单的容错重试逻辑; 当底层资源可用时,您的Job可以执行逻辑 ,因此您可以:
在这两种情况下,如果资源是可用的,Job可以执行它的内部逻辑并使用底层资源。 (没有失火,因为工作实际上已被执行)
这可以使用触发器来完成,设置您需要的失火策略,以防作业根本无法执行。请参阅关于Quartz失火的这篇伟大而详细的article。
定义一个在给定时间内一天内多次触发的Cron触发器,例如,从上午8:00到凌晨12:00每15分钟触发一次:
0 0/15 8-12 * * ?
使用之前描述的两种方法之一
第一次您的作业内部逻辑执行(即资源可用)您的作业将保存“作业执行标志”,其中包含在DB上某处执行的日期。
在下面的触发器执行中,Job将检查该标志,并且不会再次执行它的内部逻辑。
此外,如果您的工作需要很长时间才能完成,您可能希望使用以下注释来防止同时执行同一作业:
@DisableConcurrentExecution
有关作业执行的更多信息,请参阅Quartz tutorials。