我有一个Quartz作业,它安排了一组触发器,它有3到5分钟的执行时间 . 但是在将来的任何时候(可能是一周后或几分钟后)我可能需要使用新的触发器重新安排它 . 触发器集上会有一些添加或删除 .
如何使用新的触发器设置重新安排工作?这里的诀窍是,我想确保当时没有任何工作实例,所以我可以可靠地重新安排工作 . 谢谢你的帮助...
我记得它,你可以这样做:
List<JobExecutionContext> context = scheduler.GetCurrentlyExecutingJobs()
迭代列表并调用GetJobInstance()(或类似的东西)来查找创建上下文的作业,然后检查它是否是您感兴趣的作业 . 如果不是,您可以使用相同的触发器重新安排 . 尝试这样的事情:
Trigger trigger = Global.scheduler.GetTrigger("testTrigger","triggerGroup"); trigger.set(); Global.scheduler.RescheduleJob(trigger.JobName, trigger.JobGroup, trigger);
我重新安排了ActiveDirectoryJob如下:
public class ActiveDirectoryJob : IJob { public void Execute(IJobExecutionContext context) { var staffService = new StaffService(); staffService.Synchronize(); int intervalTime=2; ITrigger rsiTrigger = TriggerBuilder.Create() .WithIdentity(context.Trigger.Key.Name) .StartAt(DateTime.Now.AddHours(intervalTime)) .WithSimpleSchedule(x => x .WithIntervalInHours(intervalTime) .RepeatForever()) .Build(); context.Scheduler.RescheduleJob(new TriggerKey(context.Trigger.Key.Name, ((AbstractTrigger)context.Trigger).Group), rsiTrigger); } }
PS:
我正在使用Quartz v2.6.1
2 回答
我记得它,你可以这样做:
迭代列表并调用GetJobInstance()(或类似的东西)来查找创建上下文的作业,然后检查它是否是您感兴趣的作业 . 如果不是,您可以使用相同的触发器重新安排 . 尝试这样的事情:
我重新安排了ActiveDirectoryJob如下:
PS:
我正在使用Quartz v2.6.1