我有一项每 X 分钟运行一次的服务。如果由于某种不可预见的原因该作业花费的时间超过 X 分钟,我想确保触发器不会启动该作业的第二个实例。
示例场景
有没有办法连接 Quartz.NET 只允许一个 Job 实例?我同意第二个触发器等待第一个触发器完成,或者我也可以选择跳过第二个触发器,因为它将在一分钟内再次触发。
我查看了 Quartz API 的 Java 版本,发现了一个属性 'DisallowConcurrentExecution ' 但在 .NET 版本中没有找到类似的。
我的 Quartz.NET 实现代码
公共(public) IScheduler 调度程序 { 获取;放; }public IJobListener AutofacJobListener { 获取;放; }public void Start(){ var trigger = TriggerUtils.MakeMinutelyTrigger(1); trigger.Name = @"文档导入触发器"; Scheduler.ScheduleJob(new JobDetail("文档导入", null, typeof(DocumentImportJob)), trigger); Scheduler.AddGlobalJobListener(AutofacJobListener);调度程序.Start();}
最佳答案
作为对此答案的更新,在 Quartz.Net 的较新版本中,现在通过应用于作业实现的属性“DisallowConcurrentExecution”完成:
[DisallowConcurrentExecution]
public class MyJob : IJob
{
..
}
对于失火指令,这里是如何做到这一点的:
var trigger = TriggerBuilder.Create()
.WithSimpleSchedule(ssb => ssb.WithIntervalInMinutes(interval)
.RepeatForever()
.WithMisfireHandlingInstructionIgnoreMisfires()
)
.Build();
关于.net - 在 Quartz.NET 中,有没有办法设置一个只允许一个 Job 实例运行的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5984220/