Beispiel #1
0
        /// <summary>
        /// MonthlyCalendar 排除每月某一天的任务的执行
        /// </summary>
        public static void Fun14()
        {
            var sche = StdSchedulerFactory.GetDefaultScheduler();

            sche.Start();

            MonthlyCalendar cale = new MonthlyCalendar();

            cale.SetDayExcluded(25, true);  //排除每个月25号执行
            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);
        }
Beispiel #2
0
        public void SerializeMonthlyCalendar()
        {
            var calendar = new MonthlyCalendar();

            calendar.Description = "description";
            calendar.SetDayExcluded(23, true);
            CompareSerialization(calendar);
        }
Beispiel #3
0
        public void TestMonthlyCalendarSerialization()
        {
            MonthlyCalendar monthlyCalendar = new MonthlyCalendar();

            monthlyCalendar.SetDayExcluded(20, true);
            MonthlyCalendar clone = monthlyCalendar.DeepClone();

            Assert.IsTrue(clone.IsDayExcluded(20));
        }
Beispiel #4
0
        /// <summary>
        /// 每月排除
        /// </summary>
        /// <param name="schedulerName"></param>
        /// <param name="calName"></param>
        /// <param name="excludeDays"></param>
        /// <returns></returns>
        public async Task ExcludeInMonthAsync(string schedulerName, string calName, int[] excludeDays)
        {
            var scheduler = await GetSchedulerAsync(schedulerName);

            var calender = new MonthlyCalendar();

            excludeDays.ForEach(item => calender.SetDayExcluded(item, true));
            await scheduler.AddCalendar(calName, calender, true, true);
        }
Beispiel #5
0
        public void TestForInfiniteLoop()
        {
            MonthlyCalendar monthlyCalendar = new MonthlyCalendar();

            for (int i = 1; i < 9; i++)
            {
                monthlyCalendar.SetDayExcluded(i, true);
            }

            DateTime d = new DateTime(2007, 11, 8, 12, 0, 0);

            monthlyCalendar.GetNextIncludedTimeUtc(d.ToUniversalTime());
        }
Beispiel #6
0
        public void TestTimeZone()
        {
            TimeZoneInfo    tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
            MonthlyCalendar monthlyCalendar = new MonthlyCalendar();

            monthlyCalendar.TimeZone = tz;

            monthlyCalendar.SetDayExcluded(4, true);

            // 11/5/2012 12:00:00 AM -04:00  translate into 11/4/2012 11:00:00 PM -05:00 (EST)
            DateTimeOffset date = new DateTimeOffset(2012, 11, 5, 0, 0, 0, TimeSpan.FromHours(-4));

            Assert.IsFalse(monthlyCalendar.IsTimeIncluded(date));
        }
Beispiel #7
0
        public void TestRemoveCalendarWhenTriggersPresent()
        {
            // QRTZNET-29

            IOperableTrigger trigger = new SimpleTriggerImpl("trigger1", "triggerGroup1", fJobDetail.Name, fJobDetail.Group, DateTimeOffset.Now.AddSeconds(100), DateTimeOffset.Now.AddSeconds(200), 2, TimeSpan.FromSeconds(2));

            trigger.ComputeFirstFireTimeUtc(null);
            ICalendar cal = new MonthlyCalendar();

            fJobStore.StoreTrigger(trigger, false);
            fJobStore.StoreCalendar("cal", cal, false, true);

            fJobStore.RemoveCalendar("cal");
        }
Beispiel #8
0
 static void InitializeMonthly(MonthlyCalendar monthlyCalendar, IMonthlyCalendar calendar)
 {
     monthlyCalendar.TimeZone = TimeZoneInfo.FindSystemTimeZoneById(RegistryTimeZoneProvider.GetRegistryKeyNameByTimeZoneId(calendar.TimeZone));
     calendar.DaysExcluded.ForEach(i => monthlyCalendar.SetDayExcluded(i, true));
     calendar.DaysIncluded.ForEach(i => monthlyCalendar.SetDayExcluded(i, false));
 }
Beispiel #9
0
 public void Setup()
 {
     cal = new MonthlyCalendar();
 }
Beispiel #10
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
        }
Beispiel #11
0
 public MonthlyCalendarDto(MonthlyCalendar calendar) : base(calendar)
 {
     DaysExcluded = calendar.DaysExcluded.ToList();
     TimeZone     = new TimeZoneDto(calendar.TimeZone);
 }
Beispiel #12
0
 public void Setup()
 {
     cal          = new MonthlyCalendar();
     cal.TimeZone = TimeZoneInfo.Utc; //assume utc if not specified.
 }
Beispiel #13
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);
        }