相关疑难解决方法(0)

在Quartz.NET中有没有办法设置一个只允许一个Job实例运行的属性?

我有一个每X分钟运行一次的服务.如果由于某些不可预见的原因,该作业的耗时超过X分钟,我想确保触发器不会启动此作业的第二个实例.

示例场景

  • 我有Job X,拿起文件,每隔1分钟由Quartz触发.
  • 作业X通常可以在1分钟内处理100个文件,超过100个文件的任何时间都需要超过1分钟.
  • 自上次运行时起,150个文件恰好在那里,因此Job X启动并开始处理.当达到1分钟时,处理了100个文件,剩下50个文件,并且作业X继续运行.
  • 然而,Job X的第二个实例被启动,因为触发器每1分钟触发一次.
  • 我现在有2个Job X实例获取相同的50个文件.

有没有办法连接Quartz.NET只允许1个Job的实例?我可以用第二个触发器等待第一个触发完成,或者我也可以选择跳过第二个触发器,因为它会在一分钟内再次触发.



我看了一下Quartz API的Java版本,发现了一个属性' DisallowConcurrentExecution ',但是在.NET版本中找不到类似的东西.

我的Quartz.NET实现代码

public IScheduler Scheduler { get; set; }
public IJobListener AutofacJobListener { get; set; }

public void Start()
{
var trigger = TriggerUtils.MakeMinutelyTrigger(1);
trigger.Name = @"Document Import Trigger";

Scheduler.ScheduleJob(new JobDetail("Document Import", null, typeof(DocumentImportJob)), trigger);
Scheduler.AddGlobalJobListener(AutofacJobListener);
Scheduler.Start();
}

.net quartz.net

33
推荐指数
2
解决办法
2万
查看次数

标签 统计

.net ×1

quartz.net ×1