当我使用 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);
}
我用 Google 搜索了一下,只发现了一个类似的案例,但没有解决。以前有没有人遇到过这个问题,可以帮我解决这个问题?
最佳答案
我在 java 中的情况,有相同的情况,但我现在正在修改触发器开始时间 背景: 我的触发器没有设置触发结束时间,只设置了触发开始时间,重新安排后,我发现当你重置触发开始时间和当前系统时间之间的时间时会出现问题,例如触发开始时间 2016/03/04 10:早上 58 点和当前系统时间 2016/03/04 11:05 am 并且你设置 cron 表达式 0 59 10 * * ?,下一次启动时间将设置为 2016/03/05 10:59 并立即启 Action 业。 在执行“重新安排”之前重置开始时间后,问题暂时解决
scheduler.pauseAll();
Date currentDate=new Date();
trigger.setStartTime(currentDate);
scheduler.rescheduleJob(trigger.getName(), trigger.getGroup(), trigger);
scheduler.resumeAll();
关于c# - Quartz Scheduler (.Net) - 为什么在运行内置 'RescheduleJob' 方法后立即触发作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31338344/