2015-07-10 1 views
4

Когда я запускаю задание с помощью Quartz, я записываю данные в таблицу в моей базе данных, и я могу видеть, что когда я запускаю задание вручную или планировал задание, таблица заполняется заданиями в нужное время ,Quartz Scheduler (.Net) - Почему работа запускается сразу после запуска встроенного метода «RescheduleJob»?

Однако, когда я перепланирую работу с использованием встроенного метода 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, и я нашел только один подобный случай, и он не был разрешен. Кто-нибудь сталкивался с этим раньше и может помочь мне обойти это?

+0

я удалил 'кварц-scheduler'-тег, так как это как раз о C# -port – DrCopyPaste

+2

Добавлен его обратно, поскольку оба имеют тот же метод/функциональность. – AnonyMouse

+0

Вы нашли решение для этого? Из-за этого я получаю «ошибки», о которых сообщают мои пользователи :( Это происходит на одном проекте .NET Framework 4.6, но не на проекте .NET Core. Они используют разные версии кварца, но я до сих пор не видел все, что угодно, что это проблема, которая была исправлена. – Dinerdo

ответ

0

Внеплановое задание, а затем запланировано его.

this.scheduler.UnscheduleJob(key); 

var trigger = this.GetTrigger(key); 
var triggerBuilder = trigger.GetTriggerBuilder(); 
ITrigger newTrigger = triggerBuilder.WithCronSchedule(cronexpression).Build(); 

this.scheduler.ScheduleJob(newTrigger); 

Затем вернулся к использованию RescheduleJob

var trigger = this.GetTrigger(key); 
var triggerBuilder = trigger.GetTriggerBuilder(); 
ITrigger newTrigger = triggerBuilder.WithCronSchedule(cronexpression).Build(); 

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

Это решило мою проблему временно, но тогда вопрос снова перезапущен.

2

мой случай в Java, есть такая же ситуация, но я работаю вокруг с модифицирующим запуском времени начала, как сейчас фона: мой триггер Безразлично `установить конец триггера время, только установить триггер времени начала, после того, как перепланировать, я нашел проблема будет возникать, если вы сбросите время между временем запуска триггера и текущим системным временем, например, время запуска триггера 2016/03/04 10:58 и текущее системное время 2016/03/04 11:05 утра, и вы установили выражение 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(); 

 Смежные вопросы

  • Нет связанных вопросов^_^