public void TestHourlyIntervalGetFireTimeAfter() { DateTimeOffset startCalendar = DateBuilder.DateOf(9, 30, 17, 1, 6, 2005); var yearlyTrigger = new CalendarIntervalTriggerImpl { StartTimeUtc = startCalendar, RepeatIntervalUnit = IntervalUnit.Hour, RepeatInterval = 100 // every 100 hours }; DateTimeOffset targetCalendar = startCalendar.AddHours(400); // jump 400 hours (4 intervals) IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(yearlyTrigger, null, 6); DateTimeOffset fifthTime = fireTimes[4]; // get the fifth fire time Assert.AreEqual(targetCalendar, fifthTime, "Hour increment result not as expected."); }
public void TestWeeklyIntervalGetFireTimeAfter() { DateTimeOffset startCalendar = DateBuilder.DateOf(9, 30, 17, 1, 6, 2005); var yearlyTrigger = new CalendarIntervalTriggerImpl { StartTimeUtc = startCalendar, RepeatIntervalUnit = IntervalUnit.Week, RepeatInterval = 6 // every six weeks }; DateTimeOffset targetCalendar = startCalendar.AddDays(7 * 6 * 4); // jump 24 weeks (4 intervals) IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(yearlyTrigger, null, 7); DateTimeOffset fifthTime = fireTimes[4]; // get the fifth fire time Assert.AreEqual(targetCalendar, fifthTime, "Week increment result not as expected."); }
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); DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl(); trigger.StartTimeUtc = startTime; trigger.StartTimeOfDayUtc = startTimeOfDay; trigger.EndTimeOfDayUtc = endTimeOfDay; trigger.RepeatIntervalUnit = IntervalUnit.Second; trigger.RepeatInterval = 72; IList <DateTimeOffset> 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); DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl(); trigger.StartTimeUtc = startTime; trigger.StartTimeOfDayUtc = startTimeOfDay; trigger.EndTimeOfDayUtc = endTimeOfDay; trigger.RepeatIntervalUnit = IntervalUnit.Minute; trigger.RepeatInterval = 72; trigger.RepeatCount = 0; IList <DateTimeOffset> 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 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. 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, 23, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(23, 23, 0, 3, 1, 2011), fireTimes[47]); }
public string DelayedHttpRequestMessage(string method, Uri destination, Dictionary <string, string> headers, Dictionary <string, string> parameters, TimeSpan delay, int retryCount, bool fireAndForget) { if (delay == null) { throw new ArgumentNullException("delay"); } if (delay < TimeSpan.Parse("00:00:00")) { throw new ArithmeticException("delay must be positive"); } string jobId = _idProducer.GetId(); using (ILoggingOperation log = _logger.NormalOperation().AddProperty("jobId", jobId)) { log.Wrap(() => { log.Info($"scheduling request {jobId} HttpRequestJob with parameters method={method}, destination={destination}, headaers={headers}, parameters={parameters}, delay={delay}, retryCount={retryCount}, fireAndForget={fireAndForget}"); IJobDetail job = JobBuilder.Create <HttpRequestJob>() .WithIdentity(jobId, ServiceConstants.JobGroupName) .StoreDurably(false) .UsingJobData("Method", method) .UsingJobData("Destination", destination.ToString()) .UsingJobData("HeadersJSON", JsonConvert.SerializeObject(headers)) .UsingJobData("ParametersJSON", JsonConvert.SerializeObject(parameters)) .UsingJobData("RetryCount", retryCount.ToString()) .UsingJobData("FireAndForget", fireAndForget.ToString()) .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity(Guid.NewGuid().ToString(), Service.ServiceConstants.TriggerGroupName) .StartAt(DateBuilder.FutureDate((int)delay.TotalMilliseconds, IntervalUnit.Millisecond)) .WithSimpleSchedule(p => p.WithMisfireHandlingInstructionFireNow()) .Build(); DateTimeOffset t = Global.Scheduler.ScheduleJob(job, trigger); log.Info($"scheduled request {jobId} HttpRequestJob in {t.ToString("HH:mm:ss.fff")}"); }); return(jobId); } }
//[ValidateDate] // Date validation as filter public async Task <IHttpActionResult> GetSchedule( int cinemaId, int year, int month, int day) { if (DateBuilder.TryBuildFrom(year, month, day, out DateTime date) == false) { return(BadRequest()); } var response = await _mediator.Send(new GetScheduleQuery { CinemaId = cinemaId, Date = date }); return(Ok(response.Data)); }
public async Task ChangeJobStatus(string keyValue, int status) { var job = await repository.FindEntity(u => u.F_Id == keyValue); if (job == null) { throw new Exception("任务不存在"); } if (status == 0) //停止 { TriggerKey triggerKey = new TriggerKey(job.F_JobName, job.F_JobGroup); // 停止触发器 await _scheduler.PauseTrigger(triggerKey); // 移除触发器 await _scheduler.UnscheduleJob(triggerKey); // 删除任务 await _scheduler.DeleteJob(new JobKey(job.F_JobName, job.F_JobGroup)); job.F_EnabledMark = false; job.F_EndRunTime = DateTime.Now; } else //启动 { DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(job.F_StarRunTime, 1); DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(DateTime.MaxValue.AddDays(-1), 1); IJobDetail jobdetail = JobBuilder.Create <JobExecute>().WithIdentity(job.F_JobName, job.F_JobGroup).Build(); jobdetail.JobDataMap.Add("F_Id", job.F_Id); ITrigger trigger = TriggerBuilder.Create() .StartAt(starRunTime) .EndAt(endRunTime) .WithIdentity(job.F_JobName, job.F_JobGroup) .WithCronSchedule(job.F_CronExpress) .Build(); await _scheduler.ScheduleJob(jobdetail, trigger); job.F_EnabledMark = true; job.F_StarRunTime = DateTime.Now; } job.Modify(job.F_Id); await repository.Update(job); }
public void TestQuartzCalendarExclusion() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); var trigger = new DailyTimeIntervalTriggerImpl { StartTimeUtc = startTime.ToUniversalTime(), StartTimeOfDay = new TimeOfDay(8, 0), RepeatIntervalUnit = IntervalUnit.Minute, RepeatInterval = 60 }; CronCalendar cronCal = new CronCalendar("* * 9-12 * * ?"); // exclude 9-12 IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, cronCal, 48); Assert.AreEqual(48, fireTimes.Count); Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]); Assert.AreEqual(DateBuilder.DateOf(13, 0, 0, 1, 1, 2011), fireTimes[1]); Assert.AreEqual(DateBuilder.DateOf(23, 0, 0, 4, 1, 2011), fireTimes[47]); }
public JsonResult AddCalendar(CalendarRequestEntity calendarReq) { try { var calendar = scheduler.GetCalendar(calendarReq.calendarname); //获取calendar if (calendar != null) { return(Json("已经有同名的calendar添加,请勿添加")); } if (calendarReq.calendartype == "DailyCalendar") { var segment = calendarReq.selectdate.Split(','); var starttime = DateBuilder.DateOf(Convert.ToInt32(segment[0]), 0, 0).DateTime; var endtime = DateBuilder.DateOf(Convert.ToInt32(segment[1]), 0, 0).DateTime; DailyCalendar dailyCalendar = new DailyCalendar(starttime, endtime); scheduler.AddCalendar(calendarReq.calendarname, dailyCalendar, true, true); //将这个calendar设置给trigger var tkeys = calendarReq.triggerkey.Split('.'); var trigger = scheduler.GetTrigger(new TriggerKey(tkeys[1], tkeys[0])); if (trigger != null) { var newTrigger = trigger.GetTriggerBuilder().ModifiedByCalendar(calendarReq.calendarname).Build(); scheduler.RescheduleJob(trigger.Key, newTrigger); } } return(Json(1)); } catch (Exception ex) { throw; } }
public string DelayedChannelMessage(string channelName, bool broadcast, string message, TimeSpan delay, int retryCount, bool fireAndForget) { if (delay == null) { throw new ArgumentNullException("delay"); } if (delay < TimeSpan.Parse("00:00:00")) { throw new ArithmeticException("delay must be positive"); } string jobId = _idProducer.GetId(); using (ILoggingOperation log = _logger.NormalOperation().AddProperty("jobId", jobId)) { log.Wrap(() => { log.Info($"scheduling request {jobId} ChannelsMessageJob with parameters channelName={channelName}, broadcast={broadcast}, message={message}, delay={delay}, retryCount={retryCount}, fireAndForget={fireAndForget}"); IJobDetail job = JobBuilder.Create <ChannelsMessageJob>() .WithIdentity(jobId, ServiceConstants.JobGroupName) .StoreDurably(false) .UsingJobData("ChannelName", channelName) .UsingJobData("Broadcast", broadcast) .UsingJobData("Message", message) .UsingJobData("RetryCount", retryCount.ToString()) .UsingJobData("FireAndForget", fireAndForget.ToString()) .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity(Guid.NewGuid().ToString(), Service.ServiceConstants.TriggerGroupName) .StartAt(DateBuilder.FutureDate((int)delay.TotalMilliseconds, IntervalUnit.Millisecond)) .WithSimpleSchedule(p => p.WithMisfireHandlingInstructionFireNow()) .Build(); DateTimeOffset t = Global.Scheduler.ScheduleJob(job, trigger); log.Info($"scheduled request {jobId} ChannelsMessageJob in {t.ToString("HH:mm:ss.fff")}"); }); return(jobId); } }
public override async Task StartAsync(CancellationToken cancellationToken) { DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now, 1); DateTimeOffset endTime = DateBuilder.NextGivenMinuteDate(DateTime.Now, 10); IJobDetail job = JobBuilder.Create <LogJob>() .WithIdentity("job", "group") .Build(); ICronTrigger cronTrigger = (ICronTrigger)TriggerBuilder.Create() .StartAt(startTime) .EndAt(endTime) .WithIdentity("job", "group") .WithCronSchedule("*/5 * * * * ?") .Build(); await _scheduler.ScheduleJob(job, cronTrigger); await _scheduler.Start(cancellationToken); }
public static void StartJob <TJob>(IScheduler scheduler, TimeSpan runInterval, string userId) where TJob : IJob { var jobName = typeof(TJob).FullName; // Add Cart Expiring Job IJobDetail job = JobBuilder.Create <CartExpireJob>() .WithIdentity("cart" + userId, "carts") .Build(); //Trigger the job to run after 15 minutes ITrigger trigger = TriggerBuilder.Create() .WithIdentity("cartTrigger" + userId, "carts") .StartAt(DateBuilder.FutureDate(runInterval.Minutes, IntervalUnit.Minute)) .Build(); job.JobDataMap.Add("userId", userId); scheduler.ScheduleJob(job, trigger); }
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); }
public void TestEndingAtAfterCount() { 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(12)) .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(10, 45, 0, 4, 1, 2011), fireTimes[47]); Assert.AreEqual(new TimeOfDay(10, 45), trigger.EndTimeOfDay); }
/// <summary> /// 任务调用的方法 /// </summary> public void Execute(IJobExecutionContext context) { DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow); int rowsAffected = 0; bool isSucessful = false; System.Data.IDataParameter[] DataParmameter = { new SqlParameter("@Task", "Task"), new SqlParameter("@RunAt", "RunAt") }; SqlParameter[] parameters = { new SqlParameter("@Task", "Task"), new SqlParameter("@RunAt", "RunAt") }; Net.DBUtility.DbHelperSQL.RunProcedure("CreateMessagesQueues", out rowsAffected); Net.DBUtility.DbHelperSQL.RunProcedure("OAuthsEmpUpDate", parameters, out rowsAffected); Console.WriteLine((rowsAffected > -1) + "同步通讯录, JosonJiang -- !" + runTime); Net.DBUtility.DbHelperSQL.RunProcedure("AddressBooksUpDate", DataParmameter, out rowsAffected); isSucessful = rowsAffected > -1; Console.WriteLine(isSucessful + "同步通讯录, JosonJiang -- start at 7:30 every day 执行1次 !" + runTime); }
public void TestEndTimeBeforeEndTimeOfDay() { DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); DateTimeOffset endTime = DateBuilder.DateOf(16, 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(35, 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(16, 0, 0, 2, 1, 2011), fireTimes[34]); }
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]); }
private void StartMonitoring() { ISchedulerFactory factory = new StdSchedulerFactory(); _scheduler = factory.GetScheduler(); _scheduler.Start(); IJobDetail jobDetail = JobBuilder.Create(typeof(MegaJob)) .WithIdentity("MegaJob") .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("MegaTrigger") .StartAt(DateBuilder.FutureDate(2, IntervalUnit.Minute)) .WithSimpleSchedule(b => b.WithIntervalInMinutes(2)) .Build(); _scheduler.ScheduleJob(jobDetail, trigger); }
public void Schedule(MagicBoxOrder magicBox) { var nexttime = magicBox.ExecutingTime; var jobDetail = JobBuilder.Create <MagicBoxOrderJob>() .WithIdentity(magicBox.Id, "group1") .Build(); var trigger = TriggerBuilder.Create() .WithIdentity(magicBox.Id, "group1") .StartAt(DateBuilder.TodayAt(nexttime.Hour, nexttime.Minute, nexttime.Second)) .Build(); // should group this together in one command. just execute when arrived there jobDetail.JobDataMap.Add("queue", orderQueue); jobDetail.JobDataMap.Add("orders", magicBox); scheduler.ScheduleJob(jobDetail, trigger); }
// 处理 日常采集任务 public void ArrangeTimedTask() { lock (this) { this.CreateSchedule(_dtus.Count); IList <DtuNode> nodes = _dtus.Values.ToList(); DateTimeOffset startTime = DateBuilder.NextGivenMinuteDate(null, 1); foreach (DtuNode dtu in nodes) { DtuGroup dgp = dtuGroups.FirstOrDefault(d => d.Exists(dtu.DtuCode)); if (dgp != null) { dtu.DacInterval = dgp.DacInterval; } this.ScheduleJob(dtu, startTime, dtu.DacInterval); } _schedule.Start(); } }
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 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 async Task <string[]> StartFileUploadOss() { try { ISchedulerFactory factory = new StdSchedulerFactory(); //1、通过调度工厂获得调度器 IScheduler _scheduler = await factory.GetScheduler(); //2、开启调度器 await _scheduler.Start(); //3、创建一个触发器 //生产环境放开 DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(DateTime.Now, 1); var Osstrigger = TriggerBuilder.Create().StartAt(startTime).WithCronSchedule(ConfigHelper.ReadConfigByName("QuartzTime")) .Build(); var Failuretrigger = TriggerBuilder.Create().StartAt(startTime).WithCronSchedule(ConfigHelper.ReadConfigByName("QuartzTime")) .Build(); //4、创建任务 var OssDetail = JobBuilder.Create <MyJobLogic>() .WithIdentity("job", "group") .Build(); var FailurejobDetail = JobBuilder.Create <FailureUploadLogic>() .WithIdentity("job1", "group") .Build(); //5、将触发器和任务器绑定到调度器中 await _scheduler.ScheduleJob(OssDetail, Osstrigger); await _scheduler.ScheduleJob(FailurejobDetail, Failuretrigger); return(await Task.FromResult(new string[] { "value1", "value2" })); } catch (Exception e) { LogHelper.logError("定时启动异常:" + e.Message); return(null); } }
/// <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 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]); }
public override void Schedule(JobDataMap jdm) { var sched = SF.GetScheduler(); var job = JobBuilder .Create <T>() .WithIdentity(_jobName, _jobGroupString) .SetJobData(jdm) .Build(); Logger.LogInformation($"Scheduling fixed time of day job {typeof(T)} to run every day at {_timeOfDay.TotalHours} hours past midnight system time"); var trigger = TriggerBuilder.Create() .WithIdentity($"{_jobGroupString}{_jobName}FixedTimeOfDay", _jobGroupString) .ForJob(_jobName, _jobGroupString) .StartAt(DateBuilder.FutureDate(30, IntervalUnit.Second)) .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(_timeOfDay.Hours, _timeOfDay.Minutes)) .Build(); sched.ScheduleJob(job, trigger); }
private async void ConfigureBackgroudJob(IServiceProvider serviceProvider) { var jobFactory = new ScheduledJobFactory(serviceProvider); var scedulerFactory = new StdSchedulerFactory(); var scheduler = await scedulerFactory.GetScheduler(); scheduler.JobFactory = jobFactory; var startTime = DateBuilder.FutureDate(2, IntervalUnit.Second); await scheduler.Start(); ITrigger checkServerTrigger = TriggerBuilder.Create() .WithIdentity("ShowsTrigger", "group1") .StartAt(startTime) .WithSimpleSchedule(x => x .WithIntervalInMinutes(120) .RepeatForever()) .Build(); var scrapJob = JobBuilder.Create <ScheduledJob>().Build(); await scheduler.ScheduleJob(scrapJob, checkServerTrigger); }