我正在尝试根据类似于
的配置设置为 Quarz.net 中的作业构建触发器 var keysArray = [1,2]
keysArray.ForEach(key =>
{
//schedule will be unique for a key
var schedule = AppConfig.Get($"CronJobs.{key}.TimeSheetAutoSubmit.Schedule.QuarzExpression") ?? "0 30 23 * * ?";
var timeZoneId = AppConfig.Get($"CronJobs.{key}.TimeSheetAutoSubmit.TimeZoneId") ?? "India Standard Time";
var trigger = TriggerBuilder.Create()
.ForJob(jobDetail)
.WithCronSchedule(schedule, x => x
.InTimeZone(TimeZoneInfo.FindSystemTimeZoneById(timeZoneId)))
.WithIdentity($"TimeSheetAutoSubmitTrigger_{key}")
.WithDescription($"ConfigKey_{key}")
.StartNow()
.Build();
Scheduler.ScheduleJob(jobDetail, trigger);
});
工作正常,但问题是当我检查日志时触发器多次触发
2017-03-16 12:04:12,247 [DefaultQuartzScheduler_Worker-1] INFO UnitedLex.Services.JobHandlers.timesheetautosubmit - job started
2017-03-16 12:04:13,510 [DefaultQuartzScheduler_Worker-2] INFO UnitedLex.Services.JobHandlers.timesheetautosubmit - job started
2017-03-16 12:04:13,710 [DefaultQuartzScheduler_Worker-2] INFO UnitedLex.Services.JobHandlers.timesheetautosubmit - job started
不知道我在这里做错了什么......
我可能是错的,但我认为这是正常的,因为你的作业构建器/调度程序位于 foreach 内,它被触发的次数等于你的数组的长度。
如果您希望作业不以并发模式运行,请在作业定义中使用此属性
[DisallowConcurrentExecution]
。
这样下一个作业触发器将等待当前正在运行的作业完成。
我遇到了同样的问题,问题是使用了错误的 cron 表达式。举个例子,如果我使用
*/2 * * * *
来安排每 2 分钟一次,它会触发多次,但使用 0 0/2 * 1/1 * ? *
则不会。
尝试使用 cronmaker 来构建时间表,它使用所谓的 Quartz 格式。