public static void ScheduleByInterval() { IScheduler sched = new StdSchedulerFactory().GetScheduler(); { JobDetailImpl jdBossReport = new JobDetailImpl("jdTest", typeof(BuildJob)); var builder = CalendarIntervalScheduleBuilder.Create(); builder.WithInterval(3, IntervalUnit.Second); IMutableTrigger triggerBossReport = builder.Build(); triggerBossReport.Key = new TriggerKey("triggerTest"); sched.ScheduleJob(jdBossReport, triggerBossReport); sched.Start(); } { JobDetailImpl jdBossReport = new JobDetailImpl("jdTest2", typeof(KillJob)); var builder = CalendarIntervalScheduleBuilder.Create(); builder.WithInterval(3, IntervalUnit.Second); IMutableTrigger triggerBossReport = builder.Build(); triggerBossReport.Key = new TriggerKey("triggerTest2"); sched.ScheduleJob(jdBossReport, triggerBossReport); sched.Start(); } }
private void YzQuartz() { IScheduler sched = new StdSchedulerFactory().GetScheduler(); { JobDetailImpl jdAddExp = new JobDetailImpl("jdYzExp", typeof(YzExpressJob)); var bulider = CalendarIntervalScheduleBuilder.Create(); bulider.WithInterval(350, IntervalUnit.Second);//每隔600秒执行一次 IMutableTrigger triggerAddExp = bulider.Build(); triggerAddExp.Key = new TriggerKey("YzExp"); sched.ScheduleJob(jdAddExp, triggerAddExp); } { JobDetailImpl jdDownloadOrder = new JobDetailImpl("jdYzDownloadOrder", typeof(YzDownloadOrderJob)); var bulider2 = CalendarIntervalScheduleBuilder.Create(); bulider2.WithInterval(350, IntervalUnit.Second);//每隔600秒执行一次 IMutableTrigger triggerDownloadOrder = bulider2.Build(); triggerDownloadOrder.Key = new TriggerKey("YzDownloadOrder"); sched.ScheduleJob(jdDownloadOrder, triggerDownloadOrder); } { JobDetailImpl jdQuantityUpdate = new JobDetailImpl("jdYzQuantityUpdate", typeof(YzQuantityUpdateJob)); var bulider3 = CalendarIntervalScheduleBuilder.Create(); bulider3.WithInterval(600, IntervalUnit.Second);//每隔60秒执行一次 IMutableTrigger triggerQuantityUpdate = bulider3.Build(); triggerQuantityUpdate.Key = new TriggerKey("YzQuantityUpdate"); sched.ScheduleJob(jdQuantityUpdate, triggerQuantityUpdate); } sched.Start(); }
protected override TriggerPropertyBundle GetTriggerPropertyBundle(SimplePropertiesTriggerProperties props) { TimeZoneInfo tz = null; // if we use null, that's ok as system default tz will be used string tzId = props.TimeZoneId; if (string.IsNullOrEmpty(tzId)) { // we moved to use separate column in v 2.6 tzId = props.String2; } if (!string.IsNullOrEmpty(tzId)) { tz = TimeZoneUtil.FindTimeZoneById(tzId); } CalendarIntervalScheduleBuilder sb = CalendarIntervalScheduleBuilder.Create() .WithInterval(props.Int1, (IntervalUnit)Enum.Parse(typeof(IntervalUnit), props.String1, true)) .InTimeZone(tz) .PreserveHourOfDayAcrossDaylightSavings(props.Boolean1) .SkipDayIfHourDoesNotExist(props.Boolean2); int timesTriggered = props.Int2; string[] statePropertyNames = { "timesTriggered" }; object[] statePropertyValues = { timesTriggered }; return(new TriggerPropertyBundle(sb, statePropertyNames, statePropertyValues)); }
//void Application_End(object sender, EventArgs e) //{ // // 在应用程序关闭时运行的代码 // //解决应用池回收问题 // Response.Redirect(Url); //} private void BbQuartz() { IScheduler sched = new StdSchedulerFactory().GetScheduler(); { JobDetailImpl jdAddExp = new JobDetailImpl("jdBbExp", typeof(BbExpressJob)); var bulider = CalendarIntervalScheduleBuilder.Create(); bulider.WithInterval(600, IntervalUnit.Second);//每隔600秒执行一次 IMutableTrigger triggerAddExp = bulider.Build(); triggerAddExp.Key = new TriggerKey("BbExp"); sched.ScheduleJob(jdAddExp, triggerAddExp); } { JobDetailImpl jdDownloadOrder = new JobDetailImpl("jdBbDownloadOrder", typeof(BbDownloadOrderJob)); var bulider2 = CalendarIntervalScheduleBuilder.Create(); bulider2.WithInterval(600, IntervalUnit.Second);//每隔600秒执行一次 IMutableTrigger triggerDownloadOrder = bulider2.Build(); triggerDownloadOrder.Key = new TriggerKey("BbDownloadOrder"); sched.ScheduleJob(jdDownloadOrder, triggerDownloadOrder); } { JobDetailImpl jdQuantityUpdate = new JobDetailImpl("jdQuantityUpdate", typeof(BbQtyUpdateJob)); var bulider3 = CalendarIntervalScheduleBuilder.Create(); bulider3.WithInterval(600, IntervalUnit.Second);//每隔600秒执行一次 IMutableTrigger triggerQuantityUpdate = bulider3.Build(); //IMutableTrigger triggerBossReport = CronScheduleBuilder.DailyAtHourAndMinute(9, 53).Build();//每天 23:45 执行一次 triggerQuantityUpdate.Key = new TriggerKey("BbQtyUpdate"); sched.ScheduleJob(jdQuantityUpdate, triggerQuantityUpdate); } sched.Start(); }
protected override TriggerPropertyBundle GetTriggerPropertyBundle(SimplePropertiesTriggerProperties props) { CalendarIntervalScheduleBuilder sb = CalendarIntervalScheduleBuilder.Create() .WithInterval( props.Int1, (IntervalUnit)Enum.Parse(typeof(IntervalUnit), props.String1, true)); int timesTriggered = props.Int2; string[] statePropertyNames = { "timesTriggered" }; object[] statePropertyValues = { timesTriggered }; return(new TriggerPropertyBundle(sb, statePropertyNames, statePropertyValues)); }
private void StartQuartz() { IScheduler sched = new StdSchedulerFactory().GetScheduler(); JobDetailImpl jobAutoConfirm = new JobDetailImpl("jobAutoConfirm", typeof(AutoConfirmJob)); CalendarIntervalScheduleBuilder builder = CalendarIntervalScheduleBuilder.Create(); builder.WithInterval(2, IntervalUnit.Minute); IMutableTrigger triggerAutoConfirm = builder.Build(); triggerAutoConfirm.Key = new TriggerKey("triggerAutoConfirm"); sched.ScheduleJob(jobAutoConfirm, triggerAutoConfirm); sched.Start(); }
/// <summary> /// Get a <see cref="IScheduleBuilder" /> that is configured to produce a /// schedule identical to this trigger's schedule. /// </summary> /// <remarks> /// </remarks> /// <seealso cref="GetTriggerBuilder()" /> public override IScheduleBuilder GetScheduleBuilder() { CalendarIntervalScheduleBuilder cb = CalendarIntervalScheduleBuilder.Create() .WithInterval(RepeatInterval, RepeatIntervalUnit); switch (MisfireInstruction) { case Quartz.MisfireInstruction.CalendarIntervalTrigger.DoNothing: cb.WithMisfireHandlingInstructionDoNothing(); break; case Quartz.MisfireInstruction.CalendarIntervalTrigger.FireOnceNow: cb.WithMisfireHandlingInstructionFireAndProceed(); break; } return(cb); }
//Quartz 使用 static void Quartz() { //如果出了异常 不会报错 所以用TryCatch IScheduler sched = new StdSchedulerFactory().GetScheduler(); JobDetailImpl jdBossReport = new JobDetailImpl("jdTest", typeof(TestJob)); //IMutableTrigger triggerBossReport = CronScheduleBuilder.DailyAtHourAndMinute(19, 38).Build();//每天23.45 var bulider = CalendarIntervalScheduleBuilder.Create(); bulider.WithInterval(3, IntervalUnit.Second); IMutableTrigger triggerBossReport = bulider.Build(); triggerBossReport.Key = new TriggerKey("triggerTest"); sched.ScheduleJob(jdBossReport, triggerBossReport); sched.Start(); Console.WriteLine("ok");; Console.ReadKey(); }
protected void ScheduleJobWithDefaultTrigger <T>(string jobGroupName, string jobName) where T : IJob { JobBuilder builder = JobBuilder.Create <T>() .WithIdentity(jobName, jobGroupName) .WithDescription(jobGroupName + "." + jobName); IJobDetail job = builder.Build(); DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow); ITrigger trigger = TriggerBuilder.Create() .WithIdentity(TriggerName, jobGroupName) .StartAt(runTime) .WithSchedule(CalendarIntervalScheduleBuilder.Create().WithIntervalInMinutes(1)) .Build(); _sched.ScheduleJob(job, trigger); Context = new SchedulerModel(_sched); }
private IScheduleBuilder CreateScheduleWithAmountAndIntervalUnit(string amountString, string intervalUnitString, TimeZoneInfo timeZone) { var intervalUnit = GrammarHelper.GetIntervalUnitValueFromString(intervalUnitString); int amount = 1; if (amountString != null) { amount = GrammarHelper.GetAmountValueFromString(amountString); } CalendarIntervalScheduleBuilder b = CalendarIntervalScheduleBuilder.Create(); b.WithInterval(amount, intervalUnit); b.PreserveHourOfDayAcrossDaylightSavings(true); b.SkipDayIfHourDoesNotExist(false); b.InTimeZone(timeZone); return(b); }
void Application_Start(object sender, EventArgs e) { // 在应用程序启动时运行的代码 RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); IScheduler sched = new StdSchedulerFactory().GetScheduler(); JobDetailImpl jdBossReport = new JobDetailImpl("jdTest", typeof(TestJob)); CalendarIntervalScheduleBuilder builder = CalendarIntervalScheduleBuilder.Create(); builder.WithInterval(5, IntervalUnit.Second); IMutableTrigger triggerBossReport = builder.Build(); triggerBossReport.Key = new TriggerKey("triggerTest"); sched.ScheduleJob(jdBossReport, triggerBossReport); sched.Start(); }
public override IScheduleBuilder GetScheduleBuilder() { CalendarIntervalScheduleBuilder cb = CalendarIntervalScheduleBuilder.Create() .WithInterval(RepeatInterval, RepeatIntervalUnit) .InTimeZone(TimeZone) .PreserveHourOfDayAcrossDaylightSavings(PreserveHourOfDayAcrossDaylightSavings) .SkipDayIfHourDoesNotExist(SkipDayIfHourDoesNotExist); switch (MisfireInstruction) { case Quartz.MisfireInstruction.CalendarIntervalTrigger.DoNothing: cb.WithMisfireHandlingInstructionDoNothing(); break; case Quartz.MisfireInstruction.CalendarIntervalTrigger.FireOnceNow: cb.WithMisfireHandlingInstructionFireAndProceed(); break; } return(cb); }
public void ShouldCreateCorrectFiringsWhenPreservingHourAcrossDaylightSavings() { var tb = TriggerBuilder.Create(); var schedBuilder = CalendarIntervalScheduleBuilder.Create(); schedBuilder.WithIntervalInWeeks(2); schedBuilder .PreserveHourOfDayAcrossDaylightSavings(true) .WithMisfireHandlingInstructionFireAndProceed(); var trigger = tb.StartAt(new DateTimeOffset(new DateTime(2014, 2, 26, 23, 45, 0))) .WithSchedule(schedBuilder) .Build(); DateTimeOffset?fireTime = null; var prevTime = new DateTimeOffset(DateTime.UtcNow); for (int i = 0; i < 100; ++i) { fireTime = trigger.GetFireTimeAfter(fireTime); if (fireTime == null) { break; } var timeSpan = fireTime.Value - prevTime; /* * Console.WriteLine("{0}: At {1:yyyy-MM-dd HH:mm:ss} ({2:ddd}) in {3}", i, fireTime.Value.LocalDateTime, * fireTime.Value.LocalDateTime, fireTime.Value - prevTime); */ if (i > 1) { Assert.That((int)timeSpan.TotalDays, Is.GreaterThanOrEqualTo(13), "should have had more than 13 days between"); Assert.That((int)timeSpan.TotalDays, Is.LessThanOrEqualTo(15), "should have had less than 15 days between"); } prevTime = fireTime.Value; } }
public void SetUp() { _now = DateTimeOffset.UtcNow; _runTime = DateBuilder.EvenMinuteDate(_now); _jobData = new Dictionary <string, object> { { "object1", new { PropertyValue = 3 } } }; _jobDataMap = new JobDataMap(_jobData); _endTime = DateTime.UtcNow.AddMonths(1); _trigger = TriggerBuilder.Create() .WithIdentity(TriggerName, GroupName) .WithDescription(Description) .StartAt(_runTime) .WithPriority(Priority) .WithSchedule(CalendarIntervalScheduleBuilder.Create().WithIntervalInMinutes(1)) .UsingJobData(_jobDataMap) .EndAt(_endTime) .Build(); _context = new TriggerModel(_trigger); }
public void CreateContext() { JobBuilder builder = JobBuilder.Create <T>() .WithIdentity(JobName, GroupName) .WithDescription(JobDescription); CustomizeJob(builder); IJobDetail job = builder.Build(); DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow); ITrigger trigger = TriggerBuilder.Create() .WithIdentity(TriggerName, GroupName) .StartAt(runTime) .WithSchedule(CalendarIntervalScheduleBuilder.Create().WithIntervalInMinutes(1)) .Build(); _sched.ScheduleJob(job, trigger); Context = new JobModel(_sched, new JobKey(JobName, GroupName)); }
public static void ExecuteWithInterval(int second, Action action) { //scheduler IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); //more job { //job JobDetailImpl job = new JobDetailImpl("zszTimer", typeof(IntervalJob)); job.JobDataMap.Add("dosth", action); //任务数据 //trigger IMutableTrigger trigger = CalendarIntervalScheduleBuilder.Create() .WithIntervalInSeconds(second).Build(); trigger.Key = new TriggerKey("zszTrigger"); //watch scheduler.ScheduleJob(job, trigger); } //start scheduler.Start(); }
protected override TriggerPropertyBundle GetTriggerPropertyBundle(SimplePropertiesTriggerProperties props) { TimeZoneInfo tz = null; // if we use null, that's ok as system default tz will be used string tzId = props.String2; if (tzId != null && tzId.Trim().Length != 0) // there could be null entries from previously released versions { tz = TimeZoneUtil.FindTimeZoneById(tzId); } CalendarIntervalScheduleBuilder sb = CalendarIntervalScheduleBuilder.Create() .WithInterval(props.Int1, (IntervalUnit)Enum.Parse(typeof(IntervalUnit), props.String1, true)) .InTimeZone(tz) .PreserveHourOfDayAcrossDaylightSavings(props.Boolean1) .SkipDayIfHourDoesNotExist(props.Boolean2); int timesTriggered = props.Int2; string[] statePropertyNames = { "timesTriggered" }; object[] statePropertyValues = { timesTriggered }; return(new TriggerPropertyBundle(sb, statePropertyNames, statePropertyValues)); }
protected virtual void ProcessInternal(string xml) { PrepForProcessing(); ValidateXml(xml); MaybeThrowValidationException(); // deserialize as object model XmlSerializer xs = new XmlSerializer(typeof(QuartzXmlConfiguration20)); QuartzXmlConfiguration20 data = (QuartzXmlConfiguration20)xs.Deserialize(new StringReader(xml)); if (data == null) { throw new SchedulerConfigException("Job definition data from XML was null after deserialization"); } // // Extract pre-processing commands // if (data.preprocessingcommands != null) { foreach (preprocessingcommandsType command in data.preprocessingcommands) { if (command.deletejobsingroup != null) { foreach (string s in command.deletejobsingroup) { string deleteJobGroup = s.NullSafeTrim(); if (!String.IsNullOrEmpty(deleteJobGroup)) { jobGroupsToDelete.Add(deleteJobGroup); } } } if (command.deletetriggersingroup != null) { foreach (string s in command.deletetriggersingroup) { string deleteTriggerGroup = s.NullSafeTrim(); if (!String.IsNullOrEmpty(deleteTriggerGroup)) { triggerGroupsToDelete.Add(deleteTriggerGroup); } } } if (command.deletejob != null) { foreach (preprocessingcommandsTypeDeletejob s in command.deletejob) { string name = s.name.TrimEmptyToNull(); string group = s.group.TrimEmptyToNull(); if (name == null) { throw new SchedulerConfigException("Encountered a 'delete-job' command without a name specified."); } jobsToDelete.Add(new JobKey(name, group)); } } if (command.deletetrigger != null) { foreach (preprocessingcommandsTypeDeletetrigger s in command.deletetrigger) { string name = s.name.TrimEmptyToNull(); string group = s.group.TrimEmptyToNull(); if (name == null) { throw new SchedulerConfigException("Encountered a 'delete-trigger' command without a name specified."); } triggersToDelete.Add(new TriggerKey(name, group)); } } } } if (log.IsDebugEnabled) { log.Debug("Found " + jobGroupsToDelete.Count + " delete job group commands."); log.Debug("Found " + triggerGroupsToDelete.Count + " delete trigger group commands."); log.Debug("Found " + jobsToDelete.Count + " delete job commands."); log.Debug("Found " + triggersToDelete.Count + " delete trigger commands."); } // // Extract directives // if (data.processingdirectives != null && data.processingdirectives.Length > 0) { bool overWrite = data.processingdirectives[0].overwriteexistingdata; log.Debug("Directive 'overwrite-existing-data' specified as: " + overWrite); OverWriteExistingData = overWrite; } else { log.Debug("Directive 'overwrite-existing-data' not specified, defaulting to " + OverWriteExistingData); } if (data.processingdirectives != null && data.processingdirectives.Length > 0) { bool ignoreduplicates = data.processingdirectives[0].ignoreduplicates; log.Debug("Directive 'ignore-duplicates' specified as: " + ignoreduplicates); IgnoreDuplicates = ignoreduplicates; } else { log.Debug("Directive 'ignore-duplicates' not specified, defaulting to " + IgnoreDuplicates); } if (data.processingdirectives != null && data.processingdirectives.Length > 0) { bool scheduleRelative = data.processingdirectives[0].scheduletriggerrelativetoreplacedtrigger; log.Debug("Directive 'schedule-trigger-relative-to-replaced-trigger' specified as: " + scheduleRelative); ScheduleTriggerRelativeToReplacedTrigger = scheduleRelative; } else { log.Debug("Directive 'schedule-trigger-relative-to-replaced-trigger' not specified, defaulting to " + ScheduleTriggerRelativeToReplacedTrigger); } // // Extract Job definitions... // List <jobdetailType> jobNodes = new List <jobdetailType>(); if (data.schedule != null) { foreach (var schedule in data.schedule) { if (schedule != null) { if (schedule.job != null) { jobNodes.AddRange(schedule.job); } } } } log.Debug("Found " + jobNodes.Count + " job definitions."); foreach (jobdetailType jobDetailType in jobNodes) { string jobName = jobDetailType.name.TrimEmptyToNull(); string jobGroup = jobDetailType.group.TrimEmptyToNull(); string jobDescription = jobDetailType.description.TrimEmptyToNull(); string jobTypeName = jobDetailType.jobtype.TrimEmptyToNull(); bool jobDurability = jobDetailType.durable; bool jobRecoveryRequested = jobDetailType.recover; Type jobType = typeLoadHelper.LoadType(jobTypeName); IJobDetail jobDetail = JobBuilder.Create(jobType) .WithIdentity(jobName, jobGroup) .WithDescription(jobDescription) .StoreDurably(jobDurability) .RequestRecovery(jobRecoveryRequested) .Build(); if (jobDetailType.jobdatamap != null && jobDetailType.jobdatamap.entry != null) { foreach (entryType entry in jobDetailType.jobdatamap.entry) { string key = entry.key.TrimEmptyToNull(); string value = entry.value.TrimEmptyToNull(); jobDetail.JobDataMap.Add(key, value); } } if (log.IsDebugEnabled) { log.Debug("Parsed job definition: " + jobDetail); } AddJobToSchedule(jobDetail); } // // Extract Trigger definitions... // List <triggerType> triggerEntries = new List <triggerType>(); if (data.schedule != null) { foreach (var schedule in data.schedule) { if (schedule != null && schedule.trigger != null) { triggerEntries.AddRange(schedule.trigger); } } } log.Debug("Found " + triggerEntries.Count + " trigger definitions."); foreach (triggerType triggerNode in triggerEntries) { string triggerName = triggerNode.Item.name.TrimEmptyToNull(); string triggerGroup = triggerNode.Item.group.TrimEmptyToNull(); string triggerDescription = triggerNode.Item.description.TrimEmptyToNull(); string triggerCalendarRef = triggerNode.Item.calendarname.TrimEmptyToNull(); string triggerJobName = triggerNode.Item.jobname.TrimEmptyToNull(); string triggerJobGroup = triggerNode.Item.jobgroup.TrimEmptyToNull(); int triggerPriority = TriggerConstants.DefaultPriority; if (!triggerNode.Item.priority.IsNullOrWhiteSpace()) { triggerPriority = Convert.ToInt32(triggerNode.Item.priority); } DateTimeOffset triggerStartTime = SystemTime.UtcNow(); if (triggerNode.Item.Item != null) { if (triggerNode.Item.Item is DateTime) { triggerStartTime = new DateTimeOffset((DateTime)triggerNode.Item.Item); } else { triggerStartTime = triggerStartTime.AddSeconds(Convert.ToInt32(triggerNode.Item.Item)); } } DateTime?triggerEndTime = triggerNode.Item.endtimeSpecified ? triggerNode.Item.endtime : (DateTime?)null; IScheduleBuilder sched; if (triggerNode.Item is simpleTriggerType) { simpleTriggerType simpleTrigger = (simpleTriggerType)triggerNode.Item; string repeatCountString = simpleTrigger.repeatcount.TrimEmptyToNull(); string repeatIntervalString = simpleTrigger.repeatinterval.TrimEmptyToNull(); int repeatCount = ParseSimpleTriggerRepeatCount(repeatCountString); TimeSpan repeatInterval = repeatIntervalString == null ? TimeSpan.Zero : TimeSpan.FromMilliseconds(Convert.ToInt64(repeatIntervalString)); sched = SimpleScheduleBuilder.Create() .WithInterval(repeatInterval) .WithRepeatCount(repeatCount); if (!simpleTrigger.misfireinstruction.IsNullOrWhiteSpace()) { ((SimpleScheduleBuilder)sched).WithMisfireHandlingInstruction(ReadMisfireInstructionFromString(simpleTrigger.misfireinstruction)); } } else if (triggerNode.Item is cronTriggerType) { cronTriggerType cronTrigger = (cronTriggerType)triggerNode.Item; string cronExpression = cronTrigger.cronexpression.TrimEmptyToNull(); string timezoneString = cronTrigger.timezone.TrimEmptyToNull(); TimeZoneInfo tz = timezoneString != null?TimeZoneInfo.FindSystemTimeZoneById(timezoneString) : null; sched = CronScheduleBuilder.CronSchedule(cronExpression) .InTimeZone(tz); if (!cronTrigger.misfireinstruction.IsNullOrWhiteSpace()) { ((CronScheduleBuilder)sched).WithMisfireHandlingInstruction(ReadMisfireInstructionFromString(cronTrigger.misfireinstruction)); } } else if (triggerNode.Item is calendarIntervalTriggerType) { calendarIntervalTriggerType calendarIntervalTrigger = (calendarIntervalTriggerType)triggerNode.Item; string repeatIntervalString = calendarIntervalTrigger.repeatinterval.TrimEmptyToNull(); IntervalUnit intervalUnit = ParseDateIntervalTriggerIntervalUnit(calendarIntervalTrigger.repeatintervalunit.TrimEmptyToNull()); int repeatInterval = repeatIntervalString == null ? 0 : Convert.ToInt32(repeatIntervalString); sched = CalendarIntervalScheduleBuilder.Create() .WithInterval(repeatInterval, intervalUnit); if (!calendarIntervalTrigger.misfireinstruction.IsNullOrWhiteSpace()) { ((CalendarIntervalScheduleBuilder)sched).WithMisfireHandlingInstruction(ReadMisfireInstructionFromString(calendarIntervalTrigger.misfireinstruction)); } } else { throw new SchedulerConfigException("Unknown trigger type in XML configuration"); } IMutableTrigger trigger = (IMutableTrigger)TriggerBuilder.Create() .WithIdentity(triggerName, triggerGroup) .WithDescription(triggerDescription) .ForJob(triggerJobName, triggerJobGroup) .StartAt(triggerStartTime) .EndAt(triggerEndTime) .WithPriority(triggerPriority) .ModifiedByCalendar(triggerCalendarRef) .WithSchedule(sched) .Build(); if (triggerNode.Item.jobdatamap != null && triggerNode.Item.jobdatamap.entry != null) { foreach (entryType entry in triggerNode.Item.jobdatamap.entry) { string key = entry.key.TrimEmptyToNull(); string value = entry.value.TrimEmptyToNull(); trigger.JobDataMap.Add(key, value); } } if (log.IsDebugEnabled) { log.Debug("Parsed trigger definition: " + trigger); } AddTriggerToSchedule(trigger); } }
public ITrigger GetQuartzTrigger(string JobName, string JobGroup) { var trigger = TriggerBuilder .Create() .WithIdentity(this.Name, this.Group) .ForJob(JobName, JobGroup); switch (this.Period) { case PeriodType.Giornaliero: var dayScheduler = DailyTimeIntervalScheduleBuilder .Create() .OnEveryDay() .InTimeZone(TimeZoneInfo.Local) .StartingDailyAt(new TimeOfDay(this.StartDate.Hour, this.StartDate.Minute, this.StartDate.Second)); if (this.Interval > 0) { dayScheduler.WithInterval(this.Interval, this.IntervalUnit); if (this.LifeUnit == IntervalUnit.Hour) { dayScheduler.EndingDailyAt(new TimeOfDay(this.StartDate.AddHours(this.Life).Hour, this.StartDate.Minute, this.StartDate.Minute)); } else { dayScheduler.EndingDailyAt(new TimeOfDay(this.StartDate.AddMinutes(this.Life).Hour, this.StartDate.AddMinutes(this.Life).Minute, this.StartDate.Minute)); } } else { dayScheduler.WithInterval(24, IntervalUnit.Hour); } trigger.WithSchedule(dayScheduler); break; case PeriodType.Settimanale: var weekScheduler = DailyTimeIntervalScheduleBuilder .Create() .OnDaysOfTheWeek(this.WeekDays.ToArray()) .InTimeZone(TimeZoneInfo.Local) .StartingDailyAt(new TimeOfDay(this.StartDate.Hour, this.StartDate.Minute, this.StartDate.Second)); if (this.Interval > 0) { if (this.IntervalUnit != IntervalUnit.Minute && this.IntervalUnit != IntervalUnit.Hour) { throw new InvalidIntervalUnitException("IntervalUnit (" + this.IntervalUnit.ToString() + ") non accettata per il periodo selezionato (" + this.Period + ")"); } weekScheduler.WithInterval(this.Interval, this.IntervalUnit); if (this.LifeUnit == IntervalUnit.Hour) { weekScheduler.EndingDailyAt(new TimeOfDay(this.StartDate.AddHours(this.Life).Hour, this.StartDate.Minute, this.StartDate.Minute)); } else if (this.LifeUnit == IntervalUnit.Minute) { weekScheduler.EndingDailyAt(new TimeOfDay(this.StartDate.AddMinutes(this.Life).Hour, this.StartDate.AddMinutes(this.Life).Minute, this.StartDate.Minute)); } else { throw new InvalidLifeUnitException("LifeUnit (" + this.LifeUnit.ToString() + ") non accettata per il periodo selezinato (" + this.Period + ")"); } } else { weekScheduler.WithInterval(24, IntervalUnit.Hour); } trigger.WithSchedule(weekScheduler); break; case PeriodType.Mensile: var monthsScheduler = CalendarIntervalScheduleBuilder .Create() .InTimeZone(TimeZoneInfo.Local); if (this.Interval > 0) { if (this.IntervalUnit != IntervalUnit.Day && this.IntervalUnit != IntervalUnit.Week) { throw new InvalidIntervalUnitException("IntervalUnit (" + this.IntervalUnit.ToString() + ") non accettata per il periodo selezionato (" + this.Period + ")"); } trigger.WithCalendarIntervalSchedule(x => { x.WithInterval(this.Interval, this.IntervalUnit); }); if (this.LifeUnit == IntervalUnit.Day) { trigger.EndAt(new DateTimeOffset(this.StartDate.AddDays(this.Life))); } else if (this.LifeUnit == IntervalUnit.Week) { trigger.EndAt(new DateTimeOffset(this.StartDate.AddDays((7 * this.Life)))); } else { throw new InvalidLifeUnitException("LifeUnit (" + this.LifeUnit.ToString() + ") non accettata per il periodo selezinato (" + this.Period + ")"); } } else { monthsScheduler.WithInterval(1, IntervalUnit.Month); } trigger.StartAt(new DateTimeOffset(this.StartDate)); break; case PeriodType.Annuale: var yearScheduler = CalendarIntervalScheduleBuilder .Create() .InTimeZone(TimeZoneInfo.Local); if (this.Interval > 0) { if (this.IntervalUnit != IntervalUnit.Year && this.IntervalUnit != IntervalUnit.Month) { throw new InvalidIntervalUnitException("IntervalUnit (" + this.IntervalUnit.ToString() + ") non accettata per il periodo selezionato (" + this.Period + ")"); } trigger.WithCalendarIntervalSchedule(x => { x.WithInterval(this.Interval, this.IntervalUnit); }); if (this.LifeUnit == IntervalUnit.Year) { trigger.EndAt(new DateTimeOffset(this.StartDate.AddDays(this.Life))); } else if (this.LifeUnit == IntervalUnit.Month) { trigger.EndAt(new DateTimeOffset(this.StartDate.AddDays((30 * this.Life)))); } else { throw new InvalidLifeUnitException("LifeUnit (" + this.LifeUnit.ToString() + ") non accettata per il periodo selezinato (" + this.Period + ")"); } } else { yearScheduler.WithInterval(1, IntervalUnit.Year); } trigger.StartAt(new DateTimeOffset(this.StartDate)); break; default: return(null); } return(trigger.Build()); }
/// <summary> /// 添加简单重复执行任务 /// </summary> /// <param name="jobName">任务名称</param> /// <param name="starTime">开始时间</param> /// <param name="endTime">结束时间</param> /// <param name="keyValue">任务主键</param> /// <param name="value">间隔值</param> /// <param name="type">间隔类型</param> public static void AddRepeatJob(string jobName, string starTime, string endTime, string keyValue, int value, string type) { try { IScheduler sched = schedFact.GetScheduler(); //得到一个调度程序 IJobDetail job = JobBuilder.Create <SchedulingHelper>() //新建任务执行类 .WithIdentity(jobName, "lrts") // name "myJob", group "group1" .UsingJobData("keyValue", keyValue) //传递参数 .Build(); ///开始时间处理 DateTime StarTime = DateTime.Now; if (!string.IsNullOrEmpty(starTime)) { StarTime = Convert.ToDateTime(starTime); } DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(StarTime, 1); ///结束时间处理 DateTime EndTime = DateTime.MaxValue.AddDays(-1); if (!string.IsNullOrEmpty(endTime)) { EndTime = Convert.ToDateTime(endTime); } DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(EndTime, 1); ITrigger trigger = null; switch (type) { case "minute": // 分钟 trigger = TriggerBuilder.Create().WithIdentity(jobName, "lrts") .StartAt(starRunTime) .EndAt(endRunTime) .WithSimpleSchedule(t => t.WithIntervalInMinutes(value) .RepeatForever()) .Build(); break; case "hours": // 小时 trigger = TriggerBuilder.Create() .WithIdentity(jobName, "lrts") .StartAt(starRunTime) .EndAt(endRunTime) .WithSimpleSchedule(t => t.WithIntervalInHours(value) .RepeatForever()) .Build(); break; case "day": // 天 trigger = TriggerBuilder.Create() .WithIdentity(jobName, "lrts") .StartAt(starRunTime) .EndAt(endRunTime) .WithSchedule( CalendarIntervalScheduleBuilder.Create() .WithIntervalInDays(value) ) .Build(); break; case "week": // 周 trigger = TriggerBuilder.Create() .WithIdentity(jobName, "lrts") .StartAt(starRunTime) .EndAt(endRunTime) .WithSchedule( CalendarIntervalScheduleBuilder.Create() .WithIntervalInWeeks(value) ) .Build(); break; } //实例化 sched.ScheduleJob(job, trigger); //启动 if (!sched.IsStarted) { sched.Start(); } } catch (Exception e) { throw (e); } }