在项目中,遇到了已知scheduler,以及trigger name 和他的group name,想要在不重启服务的情况下重新设置job的调度时间的需求。一下是Trigger的创建代码:
var myJob = new JobDetailImpl("jobName", "jobGroupName", typeof(MyJob));
var trigger = (ICronTrigger)TriggerBuilder.Create()
.WithIdentity("triggerName", "groupName")
.WithCronSchedule("0 * * * * ?")
.Build();
await scheduler.ScheduleJob(myJob , new List<ITrigger>() { trigger }, true);
在上面代码中,在scheduler中创建了一个Job, trigger name 是 "triggerName", trigger的group name 是 "groupName"。下面是重置调度时间的函数代码
public async Task ModifyJobTime(string triggerName, string groupName, string cron)
{
TriggerKey triggerKey = new TriggerKey(triggerName, groupName);
if (!(await scheduler.GetTrigger(triggerKey) is ICronTrigger trigger))
{
return;
}
string oldCron = trigger.CronExpressionString;
if (!oldCron.Equals(cron, StringComparison.OrdinalIgnoreCase))
{
var newTrigger = TriggerBuilder.Create()
.WithIdentity(triggerName, serviceName)
.WithCronSchedule(cron)
.Build() as ICronTrigger;
await scheduler.RescheduleJob(triggerKey, newTrigger);
}
}