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));
 }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        private static WeeklyCalendar SetupCalendar(DayOfWeek dayOfWeek)
        {
            var cal = new WeeklyCalendar();

            cal.SetDayExcluded(dayOfWeek, true);
            return(cal);
        }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
        public void SerializeWeeklyCalendar()
        {
            var calendar = new WeeklyCalendar();

            calendar.Description = "description";
            calendar.SetDayExcluded(DayOfWeek.Thursday, true);
            CompareSerialization(calendar);
        }
Exemple #6
0
        public void TestWeeklyCalendarSerialization()
        {
            WeeklyCalendar weeklyCalendar = new WeeklyCalendar();

            weeklyCalendar.SetDayExcluded(DayOfWeek.Monday, true);
            WeeklyCalendar clone = weeklyCalendar.DeepClone();

            Assert.IsTrue(clone.IsDayExcluded(DayOfWeek.Monday));
        }
Exemple #7
0
        /// <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);
        }
Exemple #8
0
 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));
 }
Exemple #9
0
        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
        }
Exemple #10
0
        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);
        }