c# – Quartz Scheduler(.Net) – 为什么在内置’RescheduleJob’方法运行后立即触发作业?

当我使用Quartz运行作业时,我将详细信息记录到数据库中的表中,我可以看到,当我手动运行作业或已安排作业时,表会在正确的时间填充作业详细信息.

但是,当我使用内置的RescheduleJob方法重新安排作业时,作业会被触发两次;一旦我运行方法,然后正确地,当工作被重新安排到.

例:

将作业重新调整为09:01:11,但作业已插入数据库两次,位于:

09:00:23(调用RescheduleJob方法后的秒数)

09:01:11(重新安排的时间)

我查看了我的代码,在进入RescheduleJob方法之前没有任何调用工作.

public void RescheduleTrigger(TriggerKey key, string cronexpression)
{
 var trigger = this.GetTrigger(key);
 var triggerBuilder = trigger.GetTriggerBuilder();
 ITrigger newTrigger = triggerBuilder.WithCronSchedule(cronexpression).Build();

 this.scheduler.RescheduleJob(trigger.Key, newTrigger);
}

我用谷歌搜索过,我只发现了一个类似的案例而且没有得到解决.有没有人遇到过这个问题,可以帮我解决一下吗?

最佳答案 我在java中的情况,有相同的情况,但我现在正在修改触发器启动时间

背景:

我的触发器没有设置触发结束时间,只设置触发开始时间,重新安排后,我发现当你重置触发开始时间和当前系统时间之间的时间时会发生问题,例如触发开始时间2016/03/04 10:上午58点和当前系统时间2016/03/04 11:05 am你设置cron表达式0 59 10 * * ?,下一个开火时间将设置为2016/03/05 10:59并立即开始工作.

在执行“重新安排”之前重置开始时间后,问题暂时解决

scheduler.pauseAll();
Date currentDate=new Date();
trigger.setStartTime(currentDate);
scheduler.rescheduleJob(trigger.getName(), trigger.getGroup(), trigger);
scheduler.resumeAll();
点赞