第六节: 六类Calander处理六种不同的时间场景

  背景介绍及其使用

   该章节主要补充介绍,在前一章四类触发器的基础上配合六大Canlander来动态删减某些时间,来满足更多的应用场景。

1. DailyCalendar:动态排除某天的某些字段.

(需求:每天8-23点执行,每隔1s执行一次,但是21-22点这个区间不执行)

2. WeeklyCalendar:适合在星期几的维度上做“减法操作”

(需求:每天8-23点执行,每隔1s执行一次,但是周五这一天不执行)

3. HolidayCalendar:适合当年的某一天不能执行

(需求:每天8-23点执行,每隔1s执行一次,但是今年的6月16号这一天不执行)

4. MonthlyCalendar:适合某个月中的某一天不能执行

(需求:每天8-23点执行,每隔1s执行一次,但是每月的27号不执行)

5. AnnualCalendar:适合每年指定的某一天不能执行(有问题)

(需求:每天8-23点执行,每隔1s执行一次,但是每年的6月16号这一天不执行)

6. CronCalendar:字符串表达式来排除某一天,某一个月份,某一年都可以

 (需求:每天8-23点执行,每隔1s执行一次,但是2月27号这天不执行)

 代码分享:

  1        public static void CalanderShow()
  2         {
  3             //1. 每天8-23点执行,每隔1s执行一次,但是21-22点这个区间不执行
  4             {
  5                 IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
  6                 scheduler.Start();
  7                 //单独记录一个区间段 21-22点
  8                 DailyCalendar dailyCalendar = new DailyCalendar(DateBuilder.DateOf(21, 0, 0).DateTime,
  9                                                                 DateBuilder.DateOf(22, 0, 0).DateTime);
 10                 scheduler.AddCalendar("mycalendar", dailyCalendar, true, true);
 11 
 12                 var job = JobBuilder.Create<HelloJob>().Build();
 13                 var trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
 14                                                       x => x.OnEveryDay()
 15                                                           .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 00))
 16                                                           .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(23, 00))
 17                                                           .WithIntervalInSeconds(1)
 18                                                                   )
 19                                                      .ModifiedByCalendar("mycalendar")
 20                                                      .Build();
 21                 scheduler.ScheduleJob(job, trigger);
 22             }
 23 
 24             //2. 每天8-23点执行,每隔1s执行一次,但是周五这一天不执行
 25             {
 26                 IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
 27                 scheduler.Start();
 28                 //设定周五不能执行
 29                 WeeklyCalendar calendar = new WeeklyCalendar();
 30                 calendar.SetDayExcluded(DayOfWeek.Friday, true);
 31                 scheduler.AddCalendar("mycalendar", calendar, true, true);
 32 
 33                 var job = JobBuilder.Create<HelloJob>().Build();
 34                 var trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
 35                                                       x => x.OnEveryDay()
 36                                                           .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 00))
 37                                                           .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(23, 00))
 38                                                           .WithIntervalInSeconds(1)
 39                                                                   )
 40                                                      .ModifiedByCalendar("mycalendar")
 41                                                      .Build();
 42                 scheduler.ScheduleJob(job, trigger);
 43             }
 44 
 45             //3. 每天8-23点执行,每隔1s执行一次,但是当年6月16号这一天不执行
 46             {
 47                 IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
 48                 scheduler.Start();
 49                 HolidayCalendar calendar = new HolidayCalendar();
 50                 calendar.AddExcludedDate(DateTime.Parse("06-16"));    //把当年6月16日排除在外
 51 
 52                 scheduler.AddCalendar("mycalendar", calendar, true, true);
 53                 var job = JobBuilder.Create<HelloJob>().Build();
 54                 var trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
 55                                                       x => x.OnEveryDay()
 56                                                           .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 00))
 57                                                           .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(23, 00))
 58                                                           .WithIntervalInSeconds(1)
 59                                                                   )
 60                                                      .ModifiedByCalendar("mycalendar")
 61                                                      .Build();
 62                 scheduler.ScheduleJob(job, trigger);
 63 
 64             }
 65 
 66             //4. 每天8-23点执行,每隔1s执行一次,但是每月的27号不执行
 67             {
 68                 IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
 69                 scheduler.Start();
 70 
 71                 //指定月份中的某一天不能执行
 72                 MonthlyCalendar calendar = new MonthlyCalendar();
 73                 calendar.SetDayExcluded(27, true);  //将27号这天排除在外
 74                 scheduler.AddCalendar("mycalendar", calendar, true, true);
 75 
 76                 var job = JobBuilder.Create<HelloJob>().Build();
 77                 var trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
 78                                                       x => x.OnEveryDay()
 79                                                           .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 00))
 80                                                           .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(23, 00))
 81                                                           .WithIntervalInSeconds(1)
 82                                                                   )
 83                                                      .ModifiedByCalendar("mycalendar")
 84                                                      .Build();
 85 
 86                 scheduler.ScheduleJob(job, trigger);
 87             }
 88 
 89             //5. 每天8-23点执行,每隔1s执行一次,但是每年的6月16号这一天不执行
 90             {
 91                 IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
 92                 scheduler.Start();
 93 
 94                 AnnualCalendar calendar = new AnnualCalendar();
 95                 calendar.SetDayExcluded(DateTime.Parse("06-16"), true);  //把每年的6月16日排除在外
 96                 scheduler.AddCalendar("mycalendar", calendar, true, true);
 97 
 98                 var job = JobBuilder.Create<HelloJob>().Build();
 99                 var trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
100                                                       x => x.OnEveryDay()
101                                                           .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 00))
102                                                           .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(23, 00))
103                                                           .WithIntervalInSeconds(1)
104                                                                   )
105                                                      .ModifiedByCalendar("mycalendar")
106                                                      .Build();
107                 scheduler.ScheduleJob(job, trigger);
108             }
109 
110             //6.每天8-23点执行,每隔1s执行一次,但是2月27号这天不执行
111             {
112                 IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
113                 scheduler.Start();
114 
115                 CronCalendar calendar = new CronCalendar("* * * 27 2 ?");
116                 scheduler.AddCalendar("mycalendar", calendar, true, true);
117 
118                 var job = JobBuilder.Create<HelloJob>().Build();
119                 var trigger = TriggerBuilder.Create().WithDailyTimeIntervalSchedule(
120                                                       x => x.OnEveryDay()
121                                                           .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 00))
122                                                           .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(23, 00))
123                                                           .WithIntervalInSeconds(1)
124                                                                   )
125                                                      .ModifiedByCalendar("mycalendar")
126                                                      .Build();
127                 scheduler.ScheduleJob(job, trigger);
128             }
129 
130         }

 

 

 

 

posted @ 2018-03-11 20:43  Yaopengfei  阅读(2390)  评论(2编辑  收藏  举报