public void TestAddAndRemoveExclusion() { cal.SetDayExcluded(DayOfWeek.Monday, true); Assert.IsTrue(cal.IsDayExcluded(DayOfWeek.Monday)); cal.SetDayExcluded(DayOfWeek.Monday, false); Assert.IsFalse(cal.IsDayExcluded(DayOfWeek.Monday)); }
/// <summary> /// create a dummy calendar /// </summary> /// <param name="description">Description</param> /// <returns>ICalendar</returns> protected static ICalendar CreateCalendar(string description = "week days only") { var calendar = new WeeklyCalendar(); calendar.SetDayExcluded(DayOfWeek.Saturday, true); calendar.SetDayExcluded(DayOfWeek.Sunday, true); calendar.Description = description; return(calendar); }
private static WeeklyCalendar SetupCalendar(DayOfWeek dayOfWeek) { var cal = new WeeklyCalendar(); cal.SetDayExcluded(dayOfWeek, true); return(cal); }
/// <summary> /// WeeklyCalendar 排除每周某个星期的任务的执行 /// </summary> public static void Fun12() { var sche = StdSchedulerFactory.GetDefaultScheduler(); sche.Start(); WeeklyCalendar cale = new WeeklyCalendar(); cale.SetDayExcluded(DayOfWeek.Thursday, true); //让星期四不触发Schedule //cale.SetDayExcluded(DayOfWeek.Thursday, false); //让星期四触发Schedule sche.AddCalendar("myCalendar", cale, true, true); var job = JobBuilder.Create <MyJob>() .Build(); var trigger = TriggerBuilder.Create().StartNow().WithDailyTimeIntervalSchedule( m => m.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(7, 0)) .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(19, 0)) .WithIntervalInSeconds(1) .Build() //是任务在7点-19点间执行,执行频率:每秒执行一次 ) .ModifiedByCalendar("myCalendar") .Build(); //ModifiedByCalendar 将ICalendar的设置应用到触发器中 sche.ScheduleJob(job, trigger); }
public void SerializeWeeklyCalendar() { var calendar = new WeeklyCalendar(); calendar.Description = "description"; calendar.SetDayExcluded(DayOfWeek.Thursday, true); CompareSerialization(calendar); }
public void TestWeeklyCalendarSerialization() { WeeklyCalendar weeklyCalendar = new WeeklyCalendar(); weeklyCalendar.SetDayExcluded(DayOfWeek.Monday, true); WeeklyCalendar clone = weeklyCalendar.DeepClone(); Assert.IsTrue(clone.IsDayExcluded(DayOfWeek.Monday)); }
/// <summary> /// 每周排除 /// </summary> /// <param name="schedulerName"></param> /// <param name="calName"></param> /// <param name="excludeDays"></param> /// <returns></returns> public async Task ExcludeInWeekAsync(string schedulerName, string calName, DayOfWeek[] excludeDays) { var scheduler = await GetSchedulerAsync(schedulerName); var calender = new WeeklyCalendar(); excludeDays.ForEach(item => calender.SetDayExcluded(item, true)); await scheduler.AddCalendar(calName, calender, true, true); }
static void InitializeWeekly(WeeklyCalendar weeklyCalendar, IWeeklyCalendar calendar) { weeklyCalendar.TimeZone = TimeZoneInfo.FindSystemTimeZoneById(RegistryTimeZoneProvider.GetRegistryKeyNameByTimeZoneId(calendar.TimeZone)); calendar.DaysOfWeekExcluded.ForEach(week => weeklyCalendar.SetDayExcluded(week, true)); calendar.DaysOfWeekIncluded.ForEach(week => weeklyCalendar.SetDayExcluded(week, false)); }
public static void TestQuarz() { #region 测试验证 // Common.Config.PropertiesParser.ReadFromFileResource("test.txt"); // Run(); // Set(); // Console.Read(); #endregion // Quartzlog.LogManager.Adapter=new IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); //调度者 WeeklyCalendar calendar = new WeeklyCalendar(); calendar.SetDayExcluded(DayOfWeek.Thursday, true); //设置每周五不能执行; HolidayCalendar daycalendar = new HolidayCalendar(); daycalendar.AddExcludedDate(DateTime.Now); //只取日 DateTime.Now.Day MonthlyCalendar monthcalendar = new MonthlyCalendar(); monthcalendar.SetDayExcluded(16, true); //只取月 DateTime.Now.Month AnnualCalendar annualCalendar = new AnnualCalendar(); annualCalendar.SetDayExcluded(DateTime.Now, true); //只取年月日 DateTime.Now.Year CronCalendar cronCalendar = new CronCalendar("* * * 17 6 ?"); //6月17 不执行 scheduler.AddCalendar("mycalendar", calendar, true, true); //设置每周五不能执行; scheduler.AddCalendar("mycalendar", daycalendar, true, true); //某一天不执行 scheduler.AddCalendar("mycalendar", monthcalendar, true, true); //某每月某一天不执行 scheduler.AddCalendar("mycalendar", annualCalendar, true, true); //每年某一月某一日不执行 scheduler.AddCalendar("mycalendar", cronCalendar, true, true); //每年某一月某一日不执行 scheduler.Start(); var job = JobBuilder.Create <LxshJob>().WithDescription("Job") .WithIdentity("lxshJob", "lxshGroup") .UsingJobData("userName", "Joblxsh") .Build(); //任务 var job1 = JobBuilder.Create <LxshJob>().WithDescription("Job") .WithIdentity("lxshJob", "lxshGroup") .UsingJobData("userName", "Joblxsh1") .Build(); //任务 var trigger = TriggerBuilder.Create().StartNow() .WithDescription("trigger") .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).WithRepeatCount(10)) // .WithCalendarIntervalSchedule(x=>x.WithIntervalInYears(1)) // .WithSimpleSchedule(x => x.WithIntervalInSeconds(1).RepeatForever()) .WithDailyTimeIntervalSchedule(x => { x.OnDaysOfTheWeek(new DayOfWeek[2] { DayOfWeek.Tuesday, DayOfWeek.Friday }); //每周二或者周五执行 x.OnEveryDay() .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 00)) // 八点开始 .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(18, 00)) // 十八点开始 .WithIntervalInSeconds(1); // 每1s执行一次 }) // .ModifiedByCalendar("mycalendar") .Build(); //秒分时日月 var trigger1 = TriggerBuilder.Create().WithCronSchedule("* * * * * ?").Build(); //1秒执行一次 var trigger2 = TriggerBuilder.Create().WithCronSchedule("0 * * * * ?").Build(); //1分钟执行一次 var trigger3 = TriggerBuilder.Create().WithCronSchedule("0 0/30 8-20 * * ?").Build(); //30分钟检查一次 8-20点 var trigger4 = TriggerBuilder.Create().WithCronSchedule("* * * * * ?").Build(); // scheduler.ListenerManager.AddJobListener(new lxshJobLinstener(), GroupMatcher<JobKey>.AnyGroup()); scheduler.ScheduleJob(job, trigger); //开始调度任务 // scheduler.GetTriggersOfJob(new JobKey("lxshJob")).Select(x =>x.Key.ToString() ); Console.Read(); #region WithCronSchedule // -------------------------------------- // 0 0 12 * * ? 每天12点触发 // 0 15 10 ? **每天10点15分触发 // 0 15 10 * * ? 每天10点15分触发 // 0 15 10 * * ? *每天10点15分触发 // 0 15 10 * * ? 2005 2005年每天10点15分触发 // 0 * 14 * * ? 每天下午的 2点到2点59分每分触发 // 0 0 / 5 14 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发) // 0 0 / 5 14,18 * * ? 每天下午的 2点到2点59分(整点开始,每隔5分触发) 每天下午的 18点到18点59分(整点开始,每隔5分触发) // 0 0 - 5 14 * * ? 每天下午的 2点到2点05分每分触发 // 0 10,44 14 ? 3 WED 3月分每周三下午的 2点10分和2点44分触发 // 0 15 10 ? *MON - FRI 从周一到周五每天上午的10点15分触发 // 0 15 10 15 * ? 每月15号上午10点15分触发 // 0 15 10 L * ? 每月最后一天的10点15分触发 // 0 15 10 ? *6L 每月最后一周的星期五的10点15分触发 // 0 15 10 ? *6L 2002 - 2005 从2002年到2005年每月最后一周的星期五的10点15分触发 // 0 15 10 ? *6#3 每月的第三周的星期五开始触发 // 0 0 12 1 / 5 * ? 每月的第一个中午开始每隔5天触发一次 // 0 11 11 11 11 ? 每年的11月11号 11点11分触发(光棍节) //-------------------------------------- #endregion }
private static async Task RunScheduler() { // 创建作业调度器 ISchedulerFactory factory = new StdSchedulerFactory(); IScheduler scheduler = await factory.GetScheduler(); // 开始运行调度器 await scheduler.Start(); // 创建一个作业 IJobDetail job = JobBuilder.Create <HelloJob>() .WithIdentity("job1", "jobGroup1") .StoreDurably() .Build(); // 设置trigger开始时间 var startAt = DateTimeOffset.Now; // 排除一天中的时间范围不执行 DailyCalendar dailyCalendar = new DailyCalendar(DateBuilder.DateOf(21, 0, 0).DateTime, DateBuilder.DateOf(22, 0, 0).DateTime); // 排除星期中的一天或多天 WeeklyCalendar weeklyCalendar = new WeeklyCalendar(); weeklyCalendar.SetDayExcluded(DayOfWeek.Friday, true); // 指定特定的日期,精确到天 HolidayCalendar holidayCalendar = new HolidayCalendar(); var holidayDateTime = new DateTime(2018, 11, 11); holidayCalendar.AddExcludedDate(holidayDateTime); // 排除月份中的某天,可选值为1-31,精确到天 MonthlyCalendar monthlyCalendar = new MonthlyCalendar(); monthlyCalendar.SetDayExcluded(31, true); // 排除每年中的某天,精确到天 AnnualCalendar annualCalendar = new AnnualCalendar(); var annualDateTime = new DateTime(2018, 11, 11); annualCalendar.SetDayExcluded(annualDateTime, true); // 使用表达式排除某些时间段不执行 CronCalendar cronCalendar = new CronCalendar("* * * 24 3 ?"); await scheduler.AddCalendar("calendar", cronCalendar, true, true); // trigger的附属信息 var triggerDataMap = new JobDataMap(); triggerDataMap.Add("name", "beck"); // 创建触发器 ITrigger trigger1 = TriggerBuilder.Create() .WithIdentity("trigger1", "triggerGroup1") .StartAt(DateBuilder.DateOf(18, 25, 40)) .WithDailyTimeIntervalSchedule(w => w .WithRepeatCount(20) .WithIntervalInSeconds(4) .WithMisfireHandlingInstructionIgnoreMisfires()) //.WithSimpleSchedule(w => w // .WithRepeatCount(20) // .WithIntervalInHours(1) // .WithMisfireHandlingInstructionNowWithExistingCount()) .UsingJobData(triggerDataMap) .WithPriority(3) .Build(); // 创建触发器 ITrigger trigger2 = TriggerBuilder.Create() .WithIdentity("trigger2", "triggerGroup1") .StartAt(startAt) .WithCronSchedule("* * * 24-25 3 ?") .ForJob(job) .UsingJobData(triggerDataMap) .ModifiedByCalendar("calendar") .WithPriority(7) .Build(); // 加入作业调度器中 await scheduler.ScheduleJob(job, trigger1); await scheduler.ScheduleJob(trigger2); await Task.Delay(TimeSpan.FromMinutes(2)); // 关闭scheduler await scheduler.Shutdown(true); }