public void TestSecondInterval() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 2); TimeOfDay endTimeOfDay = new TimeOfDay(13, 30, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Second, RepeatInterval = 72 }; var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 2, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(8, 56, 26, 1, 1, 2011), fireTimes[47]); }
public void TestRepeatCount0() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 72, RepeatCount = 0 }; var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(1, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); }
public void TestRepeatCount() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0); DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl(); trigger.StartTimeUtc = startTime; trigger.StartTimeOfDayUtc = startTimeOfDay; trigger.EndTimeOfDayUtc = endTimeOfDay; trigger.RepeatIntervalUnit = IntervalUnit.Minute; trigger.RepeatInterval = 72; trigger.RepeatCount = 7; IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(8, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(9, 12, 0, 3, 1, 2011), fireTimes[7]); }
public void TestNormalExample() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 72 // this interval will give three firings per day (8:00, 9:12, and 10:24) }; var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(10, 24, 0, 16, 1, 2011), fireTimes[47]); }
public void TestEndTimeAfterEndTimeOfDay() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); DateTimeOffset endTime = DateBuilder.DateOf(18, 0, 0, 2, 1, 2011); TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0); DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl(); trigger.StartTimeUtc = startTime; trigger.EndTimeUtc = endTime; trigger.EndTimeOfDayUtc = endTimeOfDay; trigger.RepeatIntervalUnit = IntervalUnit.Minute; trigger.RepeatInterval = 60; IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(36, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(0, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[17]); Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 2, 1, 2011), fireTimes[35]); }
public void TestTimeOfDayWithStartTime() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0); DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl(); trigger.StartTimeUtc = startTime; trigger.StartTimeOfDayUtc = startTimeOfDay; trigger.EndTimeOfDayUtc = endTimeOfDay; trigger.RepeatIntervalUnit = IntervalUnit.Minute; trigger.RepeatInterval = 60; IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[9]); // The 10th hours is the end of day. Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 5, 1, 2011), fireTimes[47]); }
public void TestTimeOfDayWithEndTime2() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 23, 0); TimeOfDay endTimeOfDay = new TimeOfDay(23, 59, 59); // edge case when endTime is last second of day, which is default too. var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 60 }; var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 23, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(23, 23, 0, 3, 1, 2011), fireTimes[47]); }
public void TestHourInterval() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); DateTimeOffset endTime = DateBuilder.DateOf(13, 0, 0, 15, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 1, 15); TimeOfDay endTimeOfDay = new TimeOfDay(16, 1, 15); DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl(); trigger.StartTimeUtc = startTime; trigger.StartTimeOfDayUtc = startTimeOfDay; trigger.EndTimeUtc = endTime; trigger.EndTimeOfDayUtc = endTimeOfDay; trigger.RepeatIntervalUnit = IntervalUnit.Hour; trigger.RepeatInterval = 2; IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 1, 15, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(12, 1, 15, 10, 1, 2011), fireTimes[47]); }
public void TestEndingAtAfterCountOf1() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); IDailyTimeIntervalTrigger trigger = (IDailyTimeIntervalTrigger)TriggerBuilder.Create() .WithIdentity("test") .WithDailyTimeIntervalSchedule(x => x.WithIntervalInMinutes(15) .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 0)) .EndingDailyAfterCount(1)) .StartAt(startTime) .Build(); Assert.AreEqual("test", trigger.Key.Name); Assert.AreEqual("DEFAULT", trigger.Key.Group); Assert.AreEqual(IntervalUnit.Minute, trigger.RepeatIntervalUnit); IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes((IOperableTrigger)trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 17, 2, 2011), fireTimes[47]); Assert.AreEqual(new TimeOfDay(8, 0), trigger.EndTimeOfDay); }
public void TestEndTimeAfterEndTimeOfDay() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); DateTimeOffset endTime = DateBuilder.DateOf(18, 0, 0, 2, 1, 2011); TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), EndTimeUtc = endTime.ToUniversalTime(), EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 60 }; var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(36, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(0, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[17]); Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 2, 1, 2011), fireTimes[35]); }
/// <summary> /// /// </summary> /// <param name="strTriggerKey">触发器Key</param> /// <param name="dtExecuteTime">执行Job的具体时间,只执行一次</param> public static void ModifyJobTime(string strTriggerKey, DateTime dtExecuteTime) { ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler sched = sf.GetScheduler(); TriggerKey triggerKey = new TriggerKey(strTriggerKey); DateTimeOffset runTime = DateBuilder.DateOf(dtExecuteTime.Hour, dtExecuteTime.Minute, dtExecuteTime.Second, dtExecuteTime.Day, dtExecuteTime.Month, dtExecuteTime.Year); ISimpleTrigger newTrigger = (ISimpleTrigger)TriggerBuilder.Create() .WithIdentity(triggerKey) .StartAt(runTime) .Build(); sched.RescheduleJob(triggerKey, newTrigger); }
/// <summary> /// 哑火策略:WithMisfireHandlingInstructionFireNow /// 不追赶哑火,如果有触发哑火,立即执行,更新下次执行时间 /// </summary> public static void Fun1() { var scheduler = StdSchedulerFactory.GetDefaultScheduler(); scheduler.Start(); //将键值对传给定时器 var job = JobBuilder.Create <MyJob>() .Build(); var trigger = TriggerBuilder.Create() .StartAt(DateBuilder.DateOf(7, 0, 0)) .WithSimpleSchedule(m => m.WithIntervalInHours(1) .WithRepeatCount(100) //如果有触发哑火,立即执行,如果之前定义的是12:00触发,调度时间变成了现在的时间 .WithMisfireHandlingInstructionFireNow() ).Build(); scheduler.ScheduleJob(job, trigger); }
public void TestTimeOfDayWithStartTime() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 60 }; var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[9]); // The 10th hours is the end of day. Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 5, 1, 2011), fireTimes[47]); }
public void TestRepeatCountInf() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0); DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl(); trigger.StartTimeUtc = startTime; trigger.StartTimeOfDayUtc = startTimeOfDay; trigger.EndTimeOfDayUtc = endTimeOfDay; trigger.RepeatIntervalUnit = IntervalUnit.Minute; trigger.RepeatInterval = (72); // Setting this (which is default) should make the trigger just as normal one. trigger.RepeatCount = DailyTimeIntervalTriggerImpl.RepeatIndefinitely; IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(10, 24, 0, 16, 1, 2011), fireTimes[47]); }
public static void ActivateSchedule(Schedule schedule) { TriggerBuilder builder = TriggerBuilder.Create() .WithIdentity(schedule.GetTriggerKey()) .ForJob(schedule.GetJobKey()); if (schedule.Type == ScheduleType.Daily) { builder.WithSimpleSchedule(x => x .WithIntervalInHours(24) .WithMisfireHandlingInstructionFireNow() .RepeatForever() ) .StartAt(DateBuilder.DateOf(schedule.TimeSpan.Hours, schedule.TimeSpan.Minutes, schedule.TimeSpan.Seconds)); } else if (schedule.Type == ScheduleType.Hourly) { builder.WithSimpleSchedule(x => x .WithIntervalInHours(1) .WithMisfireHandlingInstructionFireNow() .RepeatForever() ) .StartAt(NextDateForHour(schedule.TimeSpan.Minutes, schedule.TimeSpan.Seconds)); } else if (schedule.Type == ScheduleType.Minute) { builder.WithSimpleSchedule(x => x .WithIntervalInMinutes(schedule.TimeSpan.Minutes) .WithMisfireHandlingInstructionFireNow() .RepeatForever() ) .StartAt(DateBuilder.DateOf(((DateTime.Now.Minute + schedule.TimeSpan.Minutes > 59) ? DateTime.Now.Hour + 1 : DateTime.Now.Hour) % 24, (DateTime.Now.Minute + schedule.TimeSpan.Minutes) % 60, DateTime.Now.Second)); } ITrigger trigger = builder.Build(); DefaultScheduler.UnscheduleJob(trigger.Key); DefaultScheduler.ScheduleJob(trigger); }
/// <summary> /// 哑火策略:WithMisfireHandlingInstructionIgnoreMisfires /// 错过的立即追赶,下次执行时间不变 /// </summary> public static void Fun3() { var scheduler = StdSchedulerFactory.GetDefaultScheduler(); scheduler.Start(); //将键值对传给定时器 var job = JobBuilder.Create <MyJob>() .UsingJobData("count", 0) .Build(); var trigger = TriggerBuilder.Create() .StartAt(DateBuilder.DateOf(7, 0, 0)) .WithSimpleSchedule(m => m.WithIntervalInHours(1) .WithRepeatCount(100) //错过的立即追赶,然后正常调度 .WithMisfireHandlingInstructionIgnoreMisfires() ).Build(); scheduler.ScheduleJob(job, trigger); }
static void Main(string[] args) { // construct a scheduler factory ISchedulerFactory schedFact = new StdSchedulerFactory(); // get a scheduler IScheduler sched = schedFact.GetScheduler(); sched.Start(); // define the job and tie it to our HelloJob class IJobDetail job1 = JobBuilder.Create <HelloJob>() .WithIdentity("myJob1", "group1") .Build(); IJobDetail job2 = JobBuilder.Create <HelloJob>() .WithIdentity("myJob2", "group1") .Build(); ITrigger trigger1 = TriggerBuilder.Create() .WithIdentity("myTrigger1", "group1") .StartAt(DateBuilder.DateOf(8, 0, 0)) .WithSimpleSchedule(x => x .WithIntervalInMinutes(15) .RepeatForever()) .EndAt(DateBuilder.DateOf(12, 0, 0)) .Build(); ITrigger trigger2 = TriggerBuilder.Create() .WithIdentity("myTrigger2", "group1") .StartAt(DateBuilder.DateOf(13, 0, 0)) .WithSimpleSchedule(x => x .WithIntervalInMinutes(15) .RepeatForever()) .EndAt(DateBuilder.DateOf(19, 0, 0)) .Build(); sched.ScheduleJob(job1, trigger1); sched.ScheduleJob(job2, trigger2); }
static async Task MainAsync(string[] args) { ISchedulerFactory factory = new StdSchedulerFactory(); IScheduler scheduler = await factory.GetScheduler(); await scheduler.Start(); var date = DateTime.Now; var startTime = DateBuilder.DateOf(date.Hour, date.Minute, date.Second + 5, date.Day, date.Month, date.Year); IJobDetail job = JobBuilder.Create <Job>().Build(); ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("trigger1", "group1").StartAt(startTime).Build(); DateTimeOffset?offset = await scheduler.ScheduleJob(job, trigger); Console.WriteLine("{0} will run at: {1} and repeat: {2} time(s), every {3} seconds", job.Key, offset, trigger.RepeatCount, trigger.RepeatInterval.TotalSeconds); // Wait for 20 seconds await Task.Delay(20000); }
/// <summary> /// 哑火策略:WithMisfireHandlingInstructionNext /// 不追赶哑火,正常执行,由于是正常执行下次执行时间不变了 /// </summary> public static void Fun4() { var scheduler = StdSchedulerFactory.GetDefaultScheduler(); scheduler.Start(); //将键值对传给定时器 var job = JobBuilder.Create <MyJob>() .Build(); var trigger = TriggerBuilder.Create() .StartAt(DateBuilder.DateOf(7, 0, 0)) .WithSimpleSchedule(m => m.WithIntervalInHours(1) .WithRepeatCount(100) //正常调度,执行次数 = 预计执行次数 - 错过的次数 //.WithMisfireHandlingInstructionNextWithRemainingCount() //正常调度,执行次数不变 .WithMisfireHandlingInstructionNextWithExistingCount() ).Build(); scheduler.ScheduleJob(job, trigger); }
public void TestTimeOfDayWithEndTimeOddInterval() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); DateTimeOffset endTime = DateBuilder.DateOf(0, 0, 0, 4, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(10, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), EndTimeUtc = endTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 23 }; var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(18, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(9, 55, 0, 1, 1, 2011), fireTimes[5]); Assert.AreEqual(DateBuilder.DateOf(9, 55, 0, 3, 1, 2011), fireTimes[17]); }
public void TestRepeatCountInf() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(11, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 72, RepeatCount = DailyTimeIntervalTriggerImpl.RepeatIndefinitely }; // Setting this (which is default) should make the trigger just as normal one. var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(10, 24, 0, 16, 1, 2011), fireTimes[47]); }
public void TestAllDaysOfTheWeek() { IReadOnlyCollection <DayOfWeek> daysOfWeek = DailyTimeIntervalScheduleBuilder.AllDaysOfTheWeek; DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); // SAT TimeOfDay startTimeOfDay = new TimeOfDay(8, 0, 0); TimeOfDay endTimeOfDay = new TimeOfDay(17, 0, 0); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = startTimeOfDay, EndTimeOfDay = endTimeOfDay, DaysOfWeek = daysOfWeek, RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 60 }; var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[9]); // The 10th hours is the end of day. Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 5, 1, 2011), fireTimes[47]); }
public IActionResult Get() { // 1. 构建 `ILogServiceClient` 实例: var client = LogServiceClientFactory.BuildSimpleClient(); // 2.查询相应日志库中的日志数据 string logstore = "net-logstore"; var asyncTask = client.GetLogsAsync ( // 「必填参数」作为方法的普通必须参数。 logstore, //查询的时间区间 DateBuilder.DateOf(11, 45, 30, 1, 1, 2018), DateTimeOffset.Now, // 「可选参数」作为方法的可选参数,可通过命名参数方式指定。 offset: 1, line: 100 ); // 在普通控制台的环境下同步等待结果直接调用即可。 var response = asyncTask.Result; var result = response // 此方法会确保返回的响应失败时候抛出`LogServiceException`。 .EnsureSuccess() // 此处获取Result是安全的。 .Result; //3.直接输出Log信息 Console.WriteLine($"RequestId:{response.RequestId}"); Console.WriteLine($"日志总数:{result.Count}"); Console.WriteLine($"首条日志:{result.Logs.FirstOrDefault()}"); //直接返回String数据 方便测试 //return $"RequestId:{response.RequestId}" + $"日志总数:{result.Count}" + $"首条日志:{result.Logs.FirstOrDefault()}"; return(Ok($"RequestId:{response.RequestId}" + $"日志总数:{result.Count}" + $"首条日志:{result.Logs.FirstOrDefault()}")); }
public void TestEndingAtAfterCountOf0() { try { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TriggerBuilder.Create() .WithIdentity("test") .WithDailyTimeIntervalSchedule(x => x.WithIntervalInMinutes(15) .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 0)) .EndingDailyAfterCount(0)) .StartAt(startTime) .Build(); Assert.Fail("We should not accept endingDailyAfterCount(0)"); } catch (ArgumentException) { // Expected. } try { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); TriggerBuilder.Create() .WithIdentity("test") .WithDailyTimeIntervalSchedule(x => x.WithIntervalInMinutes(15) .EndingDailyAfterCount(1)) .StartAt(startTime) .Build(); Assert.Fail("We should not accept endingDailyAfterCount(x) without first setting startingDailyAt."); } catch (ArgumentException) { // Expected. } }
/// <summary> /// WithCronSchedule的哑火策略 /// 哑火策略:WithMisfireHandlingInstructionFireAndProceed /// 哑火的任务合并到一次执行,下次正常执行 /// /// 哑火策略:WithMisfireHandlingInstructionIgnoreMisfires /// 追赶执行哑火的任务,下次正常执行 /// /// 哑火策略:WithMisfireHandlingInstructionDoNothing /// 什么都不做,下次正常执行 /// </summary> public static void Fun6() { var scheduler = StdSchedulerFactory.GetDefaultScheduler(); scheduler.Start(); //将键值对传给定时器 var job = JobBuilder.Create <MyJob>() .Build(); var trigger = TriggerBuilder.Create() .StartAt(DateBuilder.DateOf(7, 0, 0)) .WithCronSchedule("0 0 7-20 ? * MON-FRI", //工作日8AM - 8PM每小时执行一次 //哑火的任务合并到一次执行,下次正常执行 //m => m.WithMisfireHandlingInstructionFireAndProceed() //追赶执行哑火的任务,下次正常执行 //m => m.WithMisfireHandlingInstructionIgnoreMisfires() //什么都不做,下次正常执行 m => m.WithMisfireHandlingInstructionDoNothing() ) .Build(); scheduler.ScheduleJob(job, trigger); }
public virtual async Task Run() { ILog log = LogProvider.GetLogger(typeof(CalendarExample)); log.Info("------- Initializing ----------------------"); // First we must get a reference to a scheduler ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler sched = await sf.GetScheduler(); log.Info("------- Initialization Complete -----------"); log.Info("------- Scheduling Jobs -------------------"); // Add the holiday calendar to the schedule AnnualCalendar holidays = new AnnualCalendar(); // fourth of July (July 4) DateTime fourthOfJuly = new DateTime(DateTime.UtcNow.Year, 7, 4); holidays.SetDayExcluded(fourthOfJuly, true); // halloween (Oct 31) DateTime halloween = new DateTime(DateTime.UtcNow.Year, 10, 31); holidays.SetDayExcluded(halloween, true); // christmas (Dec 25) DateTime christmas = new DateTime(DateTime.UtcNow.Year, 12, 25); holidays.SetDayExcluded(christmas, true); // tell the schedule about our holiday calendar await sched.AddCalendar("holidays", holidays, false, false); // schedule a job to run hourly, starting on halloween // at 10 am DateTimeOffset runDate = DateBuilder.DateOf(0, 0, 10, 31, 10); IJobDetail job = JobBuilder.Create <SimpleJob>() .WithIdentity("job1", "group1") .Build(); ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartAt(runDate) .WithSimpleSchedule(x => x.WithIntervalInHours(1).RepeatForever()) .ModifiedByCalendar("holidays") .Build(); // schedule the job and print the first run date DateTimeOffset firstRunTime = await sched.ScheduleJob(job, trigger); // print out the first execution date. // Note: Since Halloween (Oct 31) is a holiday, then // we will not run until the next day! (Nov 1) log.Info($"{job.Key} will run at: {firstRunTime:r} and repeat: {trigger.RepeatCount} times, every {trigger.RepeatInterval.TotalSeconds} seconds"); // All of the jobs have been added to the scheduler, but none of the jobs // will run until the scheduler has been started log.Info("------- Starting Scheduler ----------------"); await sched.Start(); // wait 30 seconds: // note: nothing will run log.Info("------- Waiting 30 seconds... --------------"); // wait 30 seconds to show jobs await Task.Delay(TimeSpan.FromSeconds(30)); // executing... // shut down the scheduler log.Info("------- Shutting Down ---------------------"); await sched.Shutdown(true); log.Info("------- Shutdown Complete -----------------"); SchedulerMetaData metaData = await sched.GetMetaData(); log.Info($"Executed {metaData.NumberOfJobsExecuted} jobs."); }
/// <summary> /// 每日排除 /// </summary> /// <param name="schedulerName"></param> /// <param name="calName"></param> /// <param name="startHour"></param> /// <param name="startMinute"></param> /// <param name="startSecond"></param> /// <param name="endHour"></param> /// <param name="endMinute"></param> /// <param name="endSecond"></param> /// <returns></returns> public async Task ExcludeInDayAsync(string schedulerName, string calName, int startHour = 0, int startMinute = 0, int startSecond = 0, int endHour = 23, int endMinute = 59, int endSecond = 59) { var scheduler = await GetSchedulerAsync(schedulerName); var calender = new DailyCalendar(DateBuilder.DateOf(startHour, startMinute, startSecond).DateTime, DateBuilder.DateOf(endHour, endMinute, endSecond).DateTime); await scheduler.AddCalendar(calName, calender, true, true); }
/// <summary> /// Schedule jobs for each work item to send reminder emails /// </summary> /// <param name="workItem">The work item</param> public ServiceResult <ReminderSchedulerServiceResult> ScheduleReminder() { var reminderDateTime = new DateTime(); var dueDate = new DateTime(); var messages = new List <Message>(); if (StartTime != null) { dueDate = StartTime.Value; } else { dueDate = EndTime; } reminderDateTime = GetReminderDateTime(Reminder, dueDate, Origin, Location); if (reminderDateTime == dueDate) { //since we got here it means that the request to Google Distance Matrix service failed and our method returned 0 //and we should stop here and notify the user var message = "Neizdevās aprēķināt maršruta ilgumu no sākumpunkta līdz galamērķim\nLūdzu precizējiet šīs adreses!"; return(new ServiceResult <ReminderSchedulerServiceResult>() { Data = ReminderSchedulerServiceResult.Error, Messages = new Message[] { new Message() { Text = message, Severity = MessageSeverity.Error } } }); } if (WorkItemType == WorkItemType.Task) { reminderDateTime = reminderDateTime.AddHours(-Duration); } try { // construct job info IJobDetail jobDetail = JobBuilder.Create <SendReminderMailJob>() .WithIdentity("reminderFor" + Id, "reminderJobs") .RequestRecovery() .Build(); // add values to the JobDataMap for the job to use // such as the subject and due date of the work item, which is used when constructing the email jobDetail.JobDataMap["Subject"] = Subject; jobDetail.JobDataMap["DueDate"] = dueDate.ToString("dd.MM.yyyy HH:mm"); jobDetail.JobDataMap["MailTo"] = MailTo; jobDetail.JobDataMap["Url"] = Url; // create a trigger that will trigger a job execution ITrigger trigger = TriggerBuilder.Create() .WithIdentity("triggerFor" + Id, "reminderTriggers") .StartAt(DateBuilder.DateOf(reminderDateTime.Hour, reminderDateTime.Minute, reminderDateTime.Second, reminderDateTime.Day, reminderDateTime.Month, reminderDateTime.Year)) .WithSimpleSchedule(x => x.WithIntervalInMinutes(1)) .Build(); RemoveReminder(Id); //associate the job with the trigger and schedule the job scheduler.ScheduleJob(jobDetail, trigger); } catch (Exception ex) { messages.Add(new Message() { Text = string.Format("Neparedzēta kļūda ieplānojot atgādinājumu. ", ex.Message), Severity = MessageSeverity.Error }); } var result = new ServiceResult <ReminderSchedulerServiceResult>(); result.Messages = messages.ToArray(); if (messages.Any(m => m.Severity == MessageSeverity.Error)) { result.Data = ReminderSchedulerServiceResult.Error; } else { result.Data = ReminderSchedulerServiceResult.Ok; } return(result); }
public void TestDaylightSavingsTransitions() { // Pick a day before a spring daylight savings transition... DateTimeOffset startCalendar = DateBuilder.DateOf(9, 30, 17, 12, 3, 2010); var dailyTrigger = new CalendarIntervalTriggerImpl { StartTimeUtc = startCalendar, RepeatIntervalUnit = IntervalUnit.Day, RepeatInterval = 5 // every 5 days }; DateTimeOffset targetCalendar = startCalendar.AddDays(10); // jump 10 days (2 intervals) IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(dailyTrigger, null, 6); DateTimeOffset testTime = fireTimes[2]; // get the third fire time Assert.AreEqual(targetCalendar, testTime, "Day increment result not as expected over spring 2010 daylight savings transition."); // And again, Pick a day before a spring daylight savings transition... (QTZ-240) startCalendar = new DateTime(2011, 3, 12, 1, 0, 0); dailyTrigger = new CalendarIntervalTriggerImpl(); dailyTrigger.StartTimeUtc = startCalendar; dailyTrigger.RepeatIntervalUnit = IntervalUnit.Day; dailyTrigger.RepeatInterval = 1; // every day targetCalendar = startCalendar.AddDays(2); // jump 2 days (2 intervals) fireTimes = TriggerUtils.ComputeFireTimes(dailyTrigger, null, 6); testTime = fireTimes[2]; // get the third fire time Assert.AreEqual(targetCalendar, testTime, "Day increment result not as expected over spring 2011 daylight savings transition."); // And again, Pick a day before a spring daylight savings transition... (QTZ-240) - and prove time of day is not preserved without setPreserveHourOfDayAcrossDaylightSavings(true) var cetTimeZone = TimeZoneUtil.FindTimeZoneById("Central European Standard Time"); startCalendar = TimeZoneInfo.ConvertTime(new DateTime(2011, 3, 26, 4, 0, 0), cetTimeZone); dailyTrigger = new CalendarIntervalTriggerImpl(); dailyTrigger.StartTimeUtc = startCalendar; dailyTrigger.RepeatIntervalUnit = IntervalUnit.Day; dailyTrigger.RepeatInterval = 1; // every day targetCalendar = TimeZoneUtil.ConvertTime(startCalendar, cetTimeZone); targetCalendar = targetCalendar.AddDays(2); // jump 2 days (2 intervals) fireTimes = TriggerUtils.ComputeFireTimes(dailyTrigger, null, 6); testTime = fireTimes[2]; // get the third fire time DateTimeOffset testCal = TimeZoneUtil.ConvertTime(testTime, cetTimeZone); Assert.AreNotEqual(targetCalendar.Hour, testCal.Hour, "Day increment time-of-day result not as expected over spring 2011 daylight savings transition."); // And again, Pick a day before a spring daylight savings transition... (QTZ-240) - and prove time of day is preserved with setPreserveHourOfDayAcrossDaylightSavings(true) startCalendar = TimeZoneUtil.ConvertTime(new DateTime(2011, 3, 26, 4, 0, 0), cetTimeZone); dailyTrigger = new CalendarIntervalTriggerImpl(); dailyTrigger.StartTimeUtc = startCalendar; dailyTrigger.RepeatIntervalUnit = IntervalUnit.Day; dailyTrigger.RepeatInterval = 1; // every day dailyTrigger.TimeZone = cetTimeZone; dailyTrigger.PreserveHourOfDayAcrossDaylightSavings = true; targetCalendar = startCalendar.AddDays(2); // jump 2 days (2 intervals) fireTimes = TriggerUtils.ComputeFireTimes(dailyTrigger, null, 6); testTime = fireTimes[1]; // get the second fire time testCal = TimeZoneUtil.ConvertTime(testTime, cetTimeZone); Assert.AreEqual(targetCalendar.Hour, testCal.Hour, "Day increment time-of-day result not as expected over spring 2011 daylight savings transition."); // Pick a day before a fall daylight savings transition... startCalendar = new DateTimeOffset(2010, 10, 31, 9, 30, 17, TimeSpan.Zero); dailyTrigger = new CalendarIntervalTriggerImpl { StartTimeUtc = startCalendar, RepeatIntervalUnit = IntervalUnit.Day, RepeatInterval = 5 // every 5 days }; targetCalendar = startCalendar.AddDays(15); // jump 15 days (3 intervals) fireTimes = TriggerUtils.ComputeFireTimes(dailyTrigger, null, 6); testTime = fireTimes[3]; // get the fourth fire time Assert.AreEqual(targetCalendar, testTime, "Day increment result not as expected over fall daylight savings transition."); }
static async System.Threading.Tasks.Task Main(string[] args) { var props = new NameValueCollection() { { "quartz.serializer.type", "binary" } }; var factory = new StdSchedulerFactory(props); IScheduler sched = await factory.GetScheduler(); await sched.Start(); var cal = new HolidayCalendar(); cal.AddExcludedDate(DateTime.Now.AddDays(-1)); await sched.AddCalendar("myHolidays", cal, false, false); IJobDetail job = JobBuilder.Create <DumbJob>().WithIdentity("myJob", "group1") .UsingJobData("jobSays", "Hello World!") .UsingJobData("myFloatValue", 3.141f) .Build(); ITrigger trigger = TriggerBuilder.Create().WithIdentity("myTrigger") .WithSchedule(CronScheduleBuilder.CronSchedule("0-10 * * ? * * *")) // first 10 second every minute .ModifiedByCalendar("myHolidays") // but not on holidays .Build(); ITrigger trigger1 = TriggerBuilder.Create().WithIdentity("trigger1", "group1") .WithCronSchedule("0-10 * * ? * * *") // first 10 second every minute .ForJob("myJob", "group1") .Build(); ITrigger trigger2 = TriggerBuilder.Create().WithIdentity("myTrigger2") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(16, 30)) // execute job daily at 16.30 .ModifiedByCalendar("myHolidays") // but not on holidays .Build(); //Build a trigger that will fire on Wednesdays at 10:42 am, in a TimeZone other than the system’s default: ITrigger trigger21 = TriggerBuilder.Create().WithIdentity("trigger21", "group1") .WithCronSchedule("0 42 10 ? * WED", x => x .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time"))) .Build(); ITrigger trigger22 = TriggerBuilder.Create().WithIdentity("trigger3", "group1") .WithSchedule(CronScheduleBuilder.WeeklyOnDayAndHourAndMinute(DayOfWeek.Wednesday, 10, 42) .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time"))) .Build(); //SimpleTrigger : once at a specific moment in time, or at a specific moment in time followed by repeats at a specific interval. //Build a trigger for a specific moment in time, with no repeats: ISimpleTrigger trigger3 = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("myTrigger3", "group1") .StartAt(DateTimeOffset.UtcNow.AddSeconds(5)) .ForJob("myJob", "group1") // identify job with name, group strings .Build(); //Build a trigger for a specific moment in time, then repeating every ten seconds ten times: ISimpleTrigger trigger4 = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("myTrigger4", "group1") .StartAt(DateTimeOffset.UtcNow.AddSeconds(5)) // if a start time is not given (if this line were omitted), "now" is implied .WithSimpleSchedule(x => x.WithIntervalInSeconds(10) .WithRepeatCount(10)) // note that 10 repeats will give a total of 11 firings .ForJob("myJob", "group1") .Build(); //Build a trigger that will fire once, five minutes in the future: ISimpleTrigger trigger5 = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("myTrigger5", "group1") .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Second)) // use DateBuilder to create a date in the future .ForJob("myJob", "group1") .Build(); //Build a trigger that will fire now, then repeat every five minutes, until the hour 17:10: ISimpleTrigger trigger6 = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("myTrigger6", "group1") .WithSimpleSchedule(x => x.WithIntervalInSeconds(5) .RepeatForever()) .EndAt(DateBuilder.DateOf(22, 10, 0)) .Build(); //Build a trigger that will fire at the top of the next hour, then repeat every 2 hours, forever: ISimpleTrigger trigger7 = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("myTrigger7") // because group is not specified, "trigger8" will be in the default group .StartAt(DateBuilder.EvenHourDate(null)) // get the next even-hour (minutes and seconds zero ("00:00")) .WithSimpleSchedule(x => x.WithIntervalInHours(2) .RepeatForever()) // note that in this example, 'forJob(..)' is not called // - which is valid if the trigger is passed to the scheduler along with the job .Build(); await sched.ScheduleJob(job, trigger1); Console.ReadLine(); }