private void ScheduleRetryableJob(IJobExecutionContext context, IRetryableJob retryableJob) { var oldTrigger = context.Trigger; // Unschedule old trigger _scheduler.UnscheduleJob(oldTrigger.Key); // Create and schedule new trigge var retryTrigger = new SimpleTriggerImpl(oldTrigger.Key.Name, retryableJob.StartTimeRetryUtc, retryableJob.EndTimeRetryUtc, 0, TimeSpan.Zero); _scheduler.ScheduleJob(context.JobDetail, retryTrigger); }
private void ScheduleRetryableJob(JobExecutionContext context, IRetryableJob retryableJob) { var oldTrigger = context.Trigger; // Unschedule old trigger _scheduler.UnscheduleJob(oldTrigger.Name, oldTrigger.Group); // Create and schedule new trigger var retryTrigger = new SimpleTrigger(oldTrigger.Name, oldTrigger.Group, retryableJob.StartTimeRetryUtc, retryableJob.EndTimeRetryUtc, 0, TimeSpan.Zero); _scheduler.ScheduleJob(context.JobDetail, retryTrigger); }
/// <summary> /// Schedules the retryableJob /// </summary> /// <param name="context">The context</param> /// <param name="retryableJob">The job</param> private void ScheduleRetryableJob(IJobExecutionContext context, IRetryableJob retryableJob) { var oldTrigger = context.Trigger; TriggerKey retryTriggerKey = new TriggerKey(oldTrigger.Key.Name, "RETRY"); int waitInterval; IntervalUnit intervalUnit; int numberRetries = context.JobDetail.JobDataMap.GetIntValueFromString(NumberRetriesJobDataMapKey); context.JobDetail.JobDataMap.PutAsString(NumberRetriesJobDataMapKey, ++numberRetries); // Check if WaitInterval has been set in JobDataMap // If it was set, the value is in Milliseconds and overwrites value in code // Otherwise use value defined in code object obj = context.JobDetail.JobDataMap.Get(WaitIntervalJobDataMapKey); if (null == obj || !Int32.TryParse(obj.ToString(), NumberStyles.Integer, CultureInfo.InvariantCulture, out waitInterval)) { waitInterval = retryableJob.Delay; intervalUnit = retryableJob.IntervalUnit; logger.DebugFormat("Wait Interval has NOT been spectified in JobDataMap. Reschedule Job {0}.{1} using defaults (wait interval of {2} {3}(s)).", context.JobDetail.Key.Group, context.JobDetail.Key.Name, waitInterval, intervalUnit.ToString()); } else { intervalUnit = IntervalUnit.Millisecond; // value in JobDataMap is always in Miliseconds logger.TraceFormat("Reschedule Job {0}.{1} with a wait interval of {2} {3}(s).", context.JobDetail.Key.Group, context.JobDetail.Key.Name, waitInterval, intervalUnit.ToString()); } // Create and schedule new trigger var retryTrigger = TriggerBuilder.Create().ForJob(context.JobDetail).WithIdentity(retryTriggerKey).WithSimpleSchedule(s => s.WithRepeatCount(0)).StartAt(DateBuilder.FutureDate(waitInterval, intervalUnit)).Build(); if (!_scheduler.CheckExists(retryTriggerKey)) { _scheduler.ScheduleJob(retryTrigger); } else { _scheduler.RescheduleJob(retryTriggerKey, retryTrigger); } }