Exemplo n.º 1
0
        public static void ScheduleByInterval()
        {
            IScheduler sched = new StdSchedulerFactory().GetScheduler();
            {
                JobDetailImpl jdBossReport = new JobDetailImpl("jdTest", typeof(BuildJob));

                var builder = CalendarIntervalScheduleBuilder.Create();
                builder.WithInterval(3, IntervalUnit.Second);
                IMutableTrigger triggerBossReport = builder.Build();
                triggerBossReport.Key = new TriggerKey("triggerTest");

                sched.ScheduleJob(jdBossReport, triggerBossReport);
                sched.Start();
            }
            {
                JobDetailImpl jdBossReport = new JobDetailImpl("jdTest2", typeof(KillJob));

                var builder = CalendarIntervalScheduleBuilder.Create();
                builder.WithInterval(3, IntervalUnit.Second);
                IMutableTrigger triggerBossReport = builder.Build();
                triggerBossReport.Key = new TriggerKey("triggerTest2");

                sched.ScheduleJob(jdBossReport, triggerBossReport);
                sched.Start();
            }
        }
Exemplo n.º 2
0
        private void  YzQuartz()
        {
            IScheduler sched = new StdSchedulerFactory().GetScheduler();

            {
                JobDetailImpl jdAddExp = new JobDetailImpl("jdYzExp", typeof(YzExpressJob));
                var           bulider  = CalendarIntervalScheduleBuilder.Create();
                bulider.WithInterval(350, IntervalUnit.Second);//每隔600秒执行一次
                IMutableTrigger triggerAddExp = bulider.Build();
                triggerAddExp.Key = new TriggerKey("YzExp");
                sched.ScheduleJob(jdAddExp, triggerAddExp);
            }
            {
                JobDetailImpl jdDownloadOrder = new JobDetailImpl("jdYzDownloadOrder", typeof(YzDownloadOrderJob));
                var           bulider2        = CalendarIntervalScheduleBuilder.Create();
                bulider2.WithInterval(350, IntervalUnit.Second);//每隔600秒执行一次
                IMutableTrigger triggerDownloadOrder = bulider2.Build();
                triggerDownloadOrder.Key = new TriggerKey("YzDownloadOrder");
                sched.ScheduleJob(jdDownloadOrder, triggerDownloadOrder);
            }
            {
                JobDetailImpl jdQuantityUpdate = new JobDetailImpl("jdYzQuantityUpdate", typeof(YzQuantityUpdateJob));
                var           bulider3         = CalendarIntervalScheduleBuilder.Create();
                bulider3.WithInterval(600, IntervalUnit.Second);//每隔60秒执行一次
                IMutableTrigger triggerQuantityUpdate = bulider3.Build();
                triggerQuantityUpdate.Key = new TriggerKey("YzQuantityUpdate");
                sched.ScheduleJob(jdQuantityUpdate, triggerQuantityUpdate);
            }
            sched.Start();
        }
Exemplo n.º 3
0
        protected override TriggerPropertyBundle GetTriggerPropertyBundle(SimplePropertiesTriggerProperties props)
        {
            TimeZoneInfo tz   = null; // if we use null, that's ok as system default tz will be used
            string       tzId = props.TimeZoneId;

            if (string.IsNullOrEmpty(tzId))
            {
                // we moved to use separate column in v 2.6
                tzId = props.String2;
            }
            if (!string.IsNullOrEmpty(tzId))
            {
                tz = TimeZoneUtil.FindTimeZoneById(tzId);
            }

            CalendarIntervalScheduleBuilder sb = CalendarIntervalScheduleBuilder.Create()
                                                 .WithInterval(props.Int1, (IntervalUnit)Enum.Parse(typeof(IntervalUnit), props.String1, true))
                                                 .InTimeZone(tz)
                                                 .PreserveHourOfDayAcrossDaylightSavings(props.Boolean1)
                                                 .SkipDayIfHourDoesNotExist(props.Boolean2);

            int timesTriggered = props.Int2;

            string[] statePropertyNames  = { "timesTriggered" };
            object[] statePropertyValues = { timesTriggered };

            return(new TriggerPropertyBundle(sb, statePropertyNames, statePropertyValues));
        }
Exemplo n.º 4
0
        //void Application_End(object sender, EventArgs e)
        //{
        //    // 在应用程序关闭时运行的代码
        //    //解决应用池回收问题
        //    Response.Redirect(Url);
        //}


        private void BbQuartz()
        {
            IScheduler sched = new StdSchedulerFactory().GetScheduler();

            {
                JobDetailImpl jdAddExp = new JobDetailImpl("jdBbExp", typeof(BbExpressJob));
                var           bulider  = CalendarIntervalScheduleBuilder.Create();
                bulider.WithInterval(600, IntervalUnit.Second);//每隔600秒执行一次
                IMutableTrigger triggerAddExp = bulider.Build();
                triggerAddExp.Key = new TriggerKey("BbExp");
                sched.ScheduleJob(jdAddExp, triggerAddExp);
            }
            {
                JobDetailImpl jdDownloadOrder = new JobDetailImpl("jdBbDownloadOrder", typeof(BbDownloadOrderJob));
                var           bulider2        = CalendarIntervalScheduleBuilder.Create();
                bulider2.WithInterval(600, IntervalUnit.Second);//每隔600秒执行一次
                IMutableTrigger triggerDownloadOrder = bulider2.Build();
                triggerDownloadOrder.Key = new TriggerKey("BbDownloadOrder");
                sched.ScheduleJob(jdDownloadOrder, triggerDownloadOrder);
            }
            {
                JobDetailImpl jdQuantityUpdate = new JobDetailImpl("jdQuantityUpdate", typeof(BbQtyUpdateJob));
                var           bulider3         = CalendarIntervalScheduleBuilder.Create();
                bulider3.WithInterval(600, IntervalUnit.Second);//每隔600秒执行一次
                IMutableTrigger triggerQuantityUpdate = bulider3.Build();
                //IMutableTrigger triggerBossReport = CronScheduleBuilder.DailyAtHourAndMinute(9, 53).Build();//每天 23:45 执行一次
                triggerQuantityUpdate.Key = new TriggerKey("BbQtyUpdate");
                sched.ScheduleJob(jdQuantityUpdate, triggerQuantityUpdate);
            }
            sched.Start();
        }
Exemplo n.º 5
0
        protected override TriggerPropertyBundle GetTriggerPropertyBundle(SimplePropertiesTriggerProperties props)
        {
            CalendarIntervalScheduleBuilder sb = CalendarIntervalScheduleBuilder.Create()
                                                 .WithInterval(
                props.Int1,
                (IntervalUnit)Enum.Parse(typeof(IntervalUnit), props.String1, true));

            int timesTriggered = props.Int2;

            string[] statePropertyNames  = { "timesTriggered" };
            object[] statePropertyValues = { timesTriggered };

            return(new TriggerPropertyBundle(sb, statePropertyNames, statePropertyValues));
        }
Exemplo n.º 6
0
        private void StartQuartz()
        {
            IScheduler sched = new StdSchedulerFactory().GetScheduler();

            JobDetailImpl jobAutoConfirm            = new JobDetailImpl("jobAutoConfirm", typeof(AutoConfirmJob));
            CalendarIntervalScheduleBuilder builder = CalendarIntervalScheduleBuilder.Create();

            builder.WithInterval(2, IntervalUnit.Minute);
            IMutableTrigger triggerAutoConfirm = builder.Build();

            triggerAutoConfirm.Key = new TriggerKey("triggerAutoConfirm");
            sched.ScheduleJob(jobAutoConfirm, triggerAutoConfirm);

            sched.Start();
        }
        /// <summary>
        /// Get a <see cref="IScheduleBuilder" /> that is configured to produce a
        /// schedule identical to this trigger's schedule.
        /// </summary>
        /// <remarks>
        /// </remarks>
        /// <seealso cref="GetTriggerBuilder()" />
        public override IScheduleBuilder GetScheduleBuilder()
        {
            CalendarIntervalScheduleBuilder cb = CalendarIntervalScheduleBuilder.Create()
                                                 .WithInterval(RepeatInterval, RepeatIntervalUnit);

            switch (MisfireInstruction)
            {
            case Quartz.MisfireInstruction.CalendarIntervalTrigger.DoNothing:
                cb.WithMisfireHandlingInstructionDoNothing();
                break;

            case Quartz.MisfireInstruction.CalendarIntervalTrigger.FireOnceNow:
                cb.WithMisfireHandlingInstructionFireAndProceed();
                break;
            }

            return(cb);
        }
Exemplo n.º 8
0
        //Quartz 使用
        static void Quartz()
        {
            //如果出了异常 不会报错 所以用TryCatch

            IScheduler    sched        = new StdSchedulerFactory().GetScheduler();
            JobDetailImpl jdBossReport = new JobDetailImpl("jdTest", typeof(TestJob));
            //IMutableTrigger triggerBossReport = CronScheduleBuilder.DailyAtHourAndMinute(19, 38).Build();//每天23.45
            var bulider = CalendarIntervalScheduleBuilder.Create();

            bulider.WithInterval(3, IntervalUnit.Second);
            IMutableTrigger triggerBossReport = bulider.Build();

            triggerBossReport.Key = new TriggerKey("triggerTest");
            sched.ScheduleJob(jdBossReport, triggerBossReport);
            sched.Start();
            Console.WriteLine("ok");;
            Console.ReadKey();
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        private IScheduleBuilder CreateScheduleWithAmountAndIntervalUnit(string amountString, string intervalUnitString, TimeZoneInfo timeZone)
        {
            var intervalUnit = GrammarHelper.GetIntervalUnitValueFromString(intervalUnitString);

            int amount = 1;

            if (amountString != null)
            {
                amount = GrammarHelper.GetAmountValueFromString(amountString);
            }

            CalendarIntervalScheduleBuilder b = CalendarIntervalScheduleBuilder.Create();

            b.WithInterval(amount, intervalUnit);

            b.PreserveHourOfDayAcrossDaylightSavings(true);
            b.SkipDayIfHourDoesNotExist(false);
            b.InTimeZone(timeZone);
            return(b);
        }
Exemplo n.º 11
0
        void Application_Start(object sender, EventArgs e)
        {
            // 在应用程序启动时运行的代码
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            IScheduler    sched        = new StdSchedulerFactory().GetScheduler();
            JobDetailImpl jdBossReport = new JobDetailImpl("jdTest", typeof(TestJob));

            CalendarIntervalScheduleBuilder builder =
                CalendarIntervalScheduleBuilder.Create();

            builder.WithInterval(5, IntervalUnit.Second);


            IMutableTrigger triggerBossReport = builder.Build();

            triggerBossReport.Key = new TriggerKey("triggerTest");
            sched.ScheduleJob(jdBossReport, triggerBossReport);
            sched.Start();
        }
        public override IScheduleBuilder GetScheduleBuilder()
        {
            CalendarIntervalScheduleBuilder cb = CalendarIntervalScheduleBuilder.Create()
                                                 .WithInterval(RepeatInterval, RepeatIntervalUnit)
                                                 .InTimeZone(TimeZone)
                                                 .PreserveHourOfDayAcrossDaylightSavings(PreserveHourOfDayAcrossDaylightSavings)
                                                 .SkipDayIfHourDoesNotExist(SkipDayIfHourDoesNotExist);

            switch (MisfireInstruction)
            {
            case Quartz.MisfireInstruction.CalendarIntervalTrigger.DoNothing:
                cb.WithMisfireHandlingInstructionDoNothing();
                break;

            case Quartz.MisfireInstruction.CalendarIntervalTrigger.FireOnceNow:
                cb.WithMisfireHandlingInstructionFireAndProceed();
                break;
            }

            return(cb);
        }
Exemplo n.º 13
0
        public void ShouldCreateCorrectFiringsWhenPreservingHourAcrossDaylightSavings()
        {
            var tb           = TriggerBuilder.Create();
            var schedBuilder = CalendarIntervalScheduleBuilder.Create();

            schedBuilder.WithIntervalInWeeks(2);
            schedBuilder
            .PreserveHourOfDayAcrossDaylightSavings(true)
            .WithMisfireHandlingInstructionFireAndProceed();

            var trigger = tb.StartAt(new DateTimeOffset(new DateTime(2014, 2, 26, 23, 45, 0)))
                          .WithSchedule(schedBuilder)
                          .Build();

            DateTimeOffset?fireTime = null;
            var            prevTime = new DateTimeOffset(DateTime.UtcNow);

            for (int i = 0; i < 100; ++i)
            {
                fireTime = trigger.GetFireTimeAfter(fireTime);
                if (fireTime == null)
                {
                    break;
                }

                var timeSpan = fireTime.Value - prevTime;

                /*
                 * Console.WriteLine("{0}: At {1:yyyy-MM-dd HH:mm:ss} ({2:ddd}) in {3}", i, fireTime.Value.LocalDateTime,
                 *  fireTime.Value.LocalDateTime, fireTime.Value - prevTime);
                 */
                if (i > 1)
                {
                    Assert.That((int)timeSpan.TotalDays, Is.GreaterThanOrEqualTo(13), "should have had more than 13 days between");
                    Assert.That((int)timeSpan.TotalDays, Is.LessThanOrEqualTo(15), "should have had less than 15 days between");
                }

                prevTime = fireTime.Value;
            }
        }
Exemplo n.º 14
0
        public void SetUp()
        {
            _now     = DateTimeOffset.UtcNow;
            _runTime = DateBuilder.EvenMinuteDate(_now);
            _jobData = new Dictionary <string, object> {
                { "object1", new { PropertyValue = 3 } }
            };
            _jobDataMap = new JobDataMap(_jobData);
            _endTime    = DateTime.UtcNow.AddMonths(1);

            _trigger = TriggerBuilder.Create()
                       .WithIdentity(TriggerName, GroupName)
                       .WithDescription(Description)
                       .StartAt(_runTime)
                       .WithPriority(Priority)
                       .WithSchedule(CalendarIntervalScheduleBuilder.Create().WithIntervalInMinutes(1))
                       .UsingJobData(_jobDataMap)
                       .EndAt(_endTime)
                       .Build();

            _context = new TriggerModel(_trigger);
        }
Exemplo n.º 15
0
        public void CreateContext()
        {
            JobBuilder builder = JobBuilder.Create <T>()
                                 .WithIdentity(JobName, GroupName)
                                 .WithDescription(JobDescription);

            CustomizeJob(builder);

            IJobDetail job = builder.Build();

            DateTimeOffset runTime = DateBuilder.EvenMinuteDate(DateTimeOffset.UtcNow);

            ITrigger trigger = TriggerBuilder.Create()
                               .WithIdentity(TriggerName, GroupName)
                               .StartAt(runTime)
                               .WithSchedule(CalendarIntervalScheduleBuilder.Create().WithIntervalInMinutes(1))
                               .Build();

            _sched.ScheduleJob(job, trigger);

            Context = new JobModel(_sched, new JobKey(JobName, GroupName));
        }
Exemplo n.º 16
0
        public static void ExecuteWithInterval(int second, Action action)
        {
            //scheduler
            IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();

            //more job
            {                                        //job
                JobDetailImpl job = new JobDetailImpl("zszTimer", typeof(IntervalJob));
                job.JobDataMap.Add("dosth", action); //任务数据

                //trigger
                IMutableTrigger trigger =
                    CalendarIntervalScheduleBuilder.Create()
                    .WithIntervalInSeconds(second).Build();
                trigger.Key = new TriggerKey("zszTrigger");

                //watch
                scheduler.ScheduleJob(job, trigger);
            }

            //start
            scheduler.Start();
        }
        protected override TriggerPropertyBundle GetTriggerPropertyBundle(SimplePropertiesTriggerProperties props)
        {
            TimeZoneInfo tz   = null; // if we use null, that's ok as system default tz will be used
            string       tzId = props.String2;

            if (tzId != null && tzId.Trim().Length != 0) // there could be null entries from previously released versions
            {
                tz = TimeZoneUtil.FindTimeZoneById(tzId);
            }

            CalendarIntervalScheduleBuilder sb = CalendarIntervalScheduleBuilder.Create()
                                                 .WithInterval(props.Int1, (IntervalUnit)Enum.Parse(typeof(IntervalUnit), props.String1, true))
                                                 .InTimeZone(tz)
                                                 .PreserveHourOfDayAcrossDaylightSavings(props.Boolean1)
                                                 .SkipDayIfHourDoesNotExist(props.Boolean2);

            int timesTriggered = props.Int2;

            string[] statePropertyNames  = { "timesTriggered" };
            object[] statePropertyValues = { timesTriggered };

            return(new TriggerPropertyBundle(sb, statePropertyNames, statePropertyValues));
        }
        protected virtual void ProcessInternal(string xml)
        {
            PrepForProcessing();

            ValidateXml(xml);
            MaybeThrowValidationException();

            // deserialize as object model
            XmlSerializer            xs   = new XmlSerializer(typeof(QuartzXmlConfiguration20));
            QuartzXmlConfiguration20 data = (QuartzXmlConfiguration20)xs.Deserialize(new StringReader(xml));

            if (data == null)
            {
                throw new SchedulerConfigException("Job definition data from XML was null after deserialization");
            }

            //
            // Extract pre-processing commands
            //
            if (data.preprocessingcommands != null)
            {
                foreach (preprocessingcommandsType command in data.preprocessingcommands)
                {
                    if (command.deletejobsingroup != null)
                    {
                        foreach (string s in command.deletejobsingroup)
                        {
                            string deleteJobGroup = s.NullSafeTrim();
                            if (!String.IsNullOrEmpty(deleteJobGroup))
                            {
                                jobGroupsToDelete.Add(deleteJobGroup);
                            }
                        }
                    }
                    if (command.deletetriggersingroup != null)
                    {
                        foreach (string s in command.deletetriggersingroup)
                        {
                            string deleteTriggerGroup = s.NullSafeTrim();
                            if (!String.IsNullOrEmpty(deleteTriggerGroup))
                            {
                                triggerGroupsToDelete.Add(deleteTriggerGroup);
                            }
                        }
                    }
                    if (command.deletejob != null)
                    {
                        foreach (preprocessingcommandsTypeDeletejob s in command.deletejob)
                        {
                            string name  = s.name.TrimEmptyToNull();
                            string group = s.group.TrimEmptyToNull();

                            if (name == null)
                            {
                                throw new SchedulerConfigException("Encountered a 'delete-job' command without a name specified.");
                            }
                            jobsToDelete.Add(new JobKey(name, group));
                        }
                    }
                    if (command.deletetrigger != null)
                    {
                        foreach (preprocessingcommandsTypeDeletetrigger s in command.deletetrigger)
                        {
                            string name  = s.name.TrimEmptyToNull();
                            string group = s.group.TrimEmptyToNull();

                            if (name == null)
                            {
                                throw new SchedulerConfigException("Encountered a 'delete-trigger' command without a name specified.");
                            }
                            triggersToDelete.Add(new TriggerKey(name, group));
                        }
                    }
                }
            }

            if (log.IsDebugEnabled)
            {
                log.Debug("Found " + jobGroupsToDelete.Count + " delete job group commands.");
                log.Debug("Found " + triggerGroupsToDelete.Count + " delete trigger group commands.");
                log.Debug("Found " + jobsToDelete.Count + " delete job commands.");
                log.Debug("Found " + triggersToDelete.Count + " delete trigger commands.");
            }

            //
            // Extract directives
            //
            if (data.processingdirectives != null && data.processingdirectives.Length > 0)
            {
                bool overWrite = data.processingdirectives[0].overwriteexistingdata;
                log.Debug("Directive 'overwrite-existing-data' specified as: " + overWrite);
                OverWriteExistingData = overWrite;
            }
            else
            {
                log.Debug("Directive 'overwrite-existing-data' not specified, defaulting to " + OverWriteExistingData);
            }

            if (data.processingdirectives != null && data.processingdirectives.Length > 0)
            {
                bool ignoreduplicates = data.processingdirectives[0].ignoreduplicates;
                log.Debug("Directive 'ignore-duplicates' specified as: " + ignoreduplicates);
                IgnoreDuplicates = ignoreduplicates;
            }
            else
            {
                log.Debug("Directive 'ignore-duplicates' not specified, defaulting to " + IgnoreDuplicates);
            }

            if (data.processingdirectives != null && data.processingdirectives.Length > 0)
            {
                bool scheduleRelative = data.processingdirectives[0].scheduletriggerrelativetoreplacedtrigger;
                log.Debug("Directive 'schedule-trigger-relative-to-replaced-trigger' specified as: " + scheduleRelative);
                ScheduleTriggerRelativeToReplacedTrigger = scheduleRelative;
            }
            else
            {
                log.Debug("Directive 'schedule-trigger-relative-to-replaced-trigger' not specified, defaulting to " + ScheduleTriggerRelativeToReplacedTrigger);
            }

            //
            // Extract Job definitions...
            //
            List <jobdetailType> jobNodes = new List <jobdetailType>();

            if (data.schedule != null)
            {
                foreach (var schedule in data.schedule)
                {
                    if (schedule != null)
                    {
                        if (schedule.job != null)
                        {
                            jobNodes.AddRange(schedule.job);
                        }
                    }
                }
            }

            log.Debug("Found " + jobNodes.Count + " job definitions.");

            foreach (jobdetailType jobDetailType in jobNodes)
            {
                string jobName              = jobDetailType.name.TrimEmptyToNull();
                string jobGroup             = jobDetailType.group.TrimEmptyToNull();
                string jobDescription       = jobDetailType.description.TrimEmptyToNull();
                string jobTypeName          = jobDetailType.jobtype.TrimEmptyToNull();
                bool   jobDurability        = jobDetailType.durable;
                bool   jobRecoveryRequested = jobDetailType.recover;

                Type jobType = typeLoadHelper.LoadType(jobTypeName);


                IJobDetail jobDetail = JobBuilder.Create(jobType)
                                       .WithIdentity(jobName, jobGroup)
                                       .WithDescription(jobDescription)
                                       .StoreDurably(jobDurability)
                                       .RequestRecovery(jobRecoveryRequested)
                                       .Build();

                if (jobDetailType.jobdatamap != null && jobDetailType.jobdatamap.entry != null)
                {
                    foreach (entryType entry in jobDetailType.jobdatamap.entry)
                    {
                        string key   = entry.key.TrimEmptyToNull();
                        string value = entry.value.TrimEmptyToNull();
                        jobDetail.JobDataMap.Add(key, value);
                    }
                }

                if (log.IsDebugEnabled)
                {
                    log.Debug("Parsed job definition: " + jobDetail);
                }

                AddJobToSchedule(jobDetail);
            }

            //
            // Extract Trigger definitions...
            //

            List <triggerType> triggerEntries = new List <triggerType>();

            if (data.schedule != null)
            {
                foreach (var schedule in data.schedule)
                {
                    if (schedule != null && schedule.trigger != null)
                    {
                        triggerEntries.AddRange(schedule.trigger);
                    }
                }
            }

            log.Debug("Found " + triggerEntries.Count + " trigger definitions.");

            foreach (triggerType triggerNode in triggerEntries)
            {
                string triggerName        = triggerNode.Item.name.TrimEmptyToNull();
                string triggerGroup       = triggerNode.Item.group.TrimEmptyToNull();
                string triggerDescription = triggerNode.Item.description.TrimEmptyToNull();
                string triggerCalendarRef = triggerNode.Item.calendarname.TrimEmptyToNull();
                string triggerJobName     = triggerNode.Item.jobname.TrimEmptyToNull();
                string triggerJobGroup    = triggerNode.Item.jobgroup.TrimEmptyToNull();

                int triggerPriority = TriggerConstants.DefaultPriority;
                if (!triggerNode.Item.priority.IsNullOrWhiteSpace())
                {
                    triggerPriority = Convert.ToInt32(triggerNode.Item.priority);
                }

                DateTimeOffset triggerStartTime = SystemTime.UtcNow();
                if (triggerNode.Item.Item != null)
                {
                    if (triggerNode.Item.Item is DateTime)
                    {
                        triggerStartTime = new DateTimeOffset((DateTime)triggerNode.Item.Item);
                    }
                    else
                    {
                        triggerStartTime = triggerStartTime.AddSeconds(Convert.ToInt32(triggerNode.Item.Item));
                    }
                }

                DateTime?triggerEndTime = triggerNode.Item.endtimeSpecified ? triggerNode.Item.endtime : (DateTime?)null;

                IScheduleBuilder sched;

                if (triggerNode.Item is simpleTriggerType)
                {
                    simpleTriggerType simpleTrigger        = (simpleTriggerType)triggerNode.Item;
                    string            repeatCountString    = simpleTrigger.repeatcount.TrimEmptyToNull();
                    string            repeatIntervalString = simpleTrigger.repeatinterval.TrimEmptyToNull();

                    int      repeatCount    = ParseSimpleTriggerRepeatCount(repeatCountString);
                    TimeSpan repeatInterval = repeatIntervalString == null ? TimeSpan.Zero : TimeSpan.FromMilliseconds(Convert.ToInt64(repeatIntervalString));

                    sched = SimpleScheduleBuilder.Create()
                            .WithInterval(repeatInterval)
                            .WithRepeatCount(repeatCount);

                    if (!simpleTrigger.misfireinstruction.IsNullOrWhiteSpace())
                    {
                        ((SimpleScheduleBuilder)sched).WithMisfireHandlingInstruction(ReadMisfireInstructionFromString(simpleTrigger.misfireinstruction));
                    }
                }
                else if (triggerNode.Item is cronTriggerType)
                {
                    cronTriggerType cronTrigger    = (cronTriggerType)triggerNode.Item;
                    string          cronExpression = cronTrigger.cronexpression.TrimEmptyToNull();
                    string          timezoneString = cronTrigger.timezone.TrimEmptyToNull();

                    TimeZoneInfo tz = timezoneString != null?TimeZoneInfo.FindSystemTimeZoneById(timezoneString) : null;

                    sched = CronScheduleBuilder.CronSchedule(cronExpression)
                            .InTimeZone(tz);

                    if (!cronTrigger.misfireinstruction.IsNullOrWhiteSpace())
                    {
                        ((CronScheduleBuilder)sched).WithMisfireHandlingInstruction(ReadMisfireInstructionFromString(cronTrigger.misfireinstruction));
                    }
                }
                else if (triggerNode.Item is calendarIntervalTriggerType)
                {
                    calendarIntervalTriggerType calendarIntervalTrigger = (calendarIntervalTriggerType)triggerNode.Item;
                    string repeatIntervalString = calendarIntervalTrigger.repeatinterval.TrimEmptyToNull();

                    IntervalUnit intervalUnit   = ParseDateIntervalTriggerIntervalUnit(calendarIntervalTrigger.repeatintervalunit.TrimEmptyToNull());
                    int          repeatInterval = repeatIntervalString == null ? 0 : Convert.ToInt32(repeatIntervalString);

                    sched = CalendarIntervalScheduleBuilder.Create()
                            .WithInterval(repeatInterval, intervalUnit);

                    if (!calendarIntervalTrigger.misfireinstruction.IsNullOrWhiteSpace())
                    {
                        ((CalendarIntervalScheduleBuilder)sched).WithMisfireHandlingInstruction(ReadMisfireInstructionFromString(calendarIntervalTrigger.misfireinstruction));
                    }
                }
                else
                {
                    throw new SchedulerConfigException("Unknown trigger type in XML configuration");
                }

                IMutableTrigger trigger = (IMutableTrigger)TriggerBuilder.Create()
                                          .WithIdentity(triggerName, triggerGroup)
                                          .WithDescription(triggerDescription)
                                          .ForJob(triggerJobName, triggerJobGroup)
                                          .StartAt(triggerStartTime)
                                          .EndAt(triggerEndTime)
                                          .WithPriority(triggerPriority)
                                          .ModifiedByCalendar(triggerCalendarRef)
                                          .WithSchedule(sched)
                                          .Build();

                if (triggerNode.Item.jobdatamap != null && triggerNode.Item.jobdatamap.entry != null)
                {
                    foreach (entryType entry in triggerNode.Item.jobdatamap.entry)
                    {
                        string key   = entry.key.TrimEmptyToNull();
                        string value = entry.value.TrimEmptyToNull();
                        trigger.JobDataMap.Add(key, value);
                    }
                }

                if (log.IsDebugEnabled)
                {
                    log.Debug("Parsed trigger definition: " + trigger);
                }

                AddTriggerToSchedule(trigger);
            }
        }
Exemplo n.º 19
0
        public ITrigger GetQuartzTrigger(string JobName, string JobGroup)
        {
            var trigger = TriggerBuilder
                          .Create()
                          .WithIdentity(this.Name, this.Group)
                          .ForJob(JobName, JobGroup);

            switch (this.Period)
            {
            case PeriodType.Giornaliero:
                var dayScheduler = DailyTimeIntervalScheduleBuilder
                                   .Create()
                                   .OnEveryDay()
                                   .InTimeZone(TimeZoneInfo.Local)
                                   .StartingDailyAt(new TimeOfDay(this.StartDate.Hour, this.StartDate.Minute, this.StartDate.Second));
                if (this.Interval > 0)
                {
                    dayScheduler.WithInterval(this.Interval, this.IntervalUnit);

                    if (this.LifeUnit == IntervalUnit.Hour)
                    {
                        dayScheduler.EndingDailyAt(new TimeOfDay(this.StartDate.AddHours(this.Life).Hour, this.StartDate.Minute, this.StartDate.Minute));
                    }
                    else
                    {
                        dayScheduler.EndingDailyAt(new TimeOfDay(this.StartDate.AddMinutes(this.Life).Hour, this.StartDate.AddMinutes(this.Life).Minute, this.StartDate.Minute));
                    }
                }
                else
                {
                    dayScheduler.WithInterval(24, IntervalUnit.Hour);
                }
                trigger.WithSchedule(dayScheduler);
                break;

            case PeriodType.Settimanale:
                var weekScheduler = DailyTimeIntervalScheduleBuilder
                                    .Create()
                                    .OnDaysOfTheWeek(this.WeekDays.ToArray())
                                    .InTimeZone(TimeZoneInfo.Local)
                                    .StartingDailyAt(new TimeOfDay(this.StartDate.Hour, this.StartDate.Minute, this.StartDate.Second));
                if (this.Interval > 0)
                {
                    if (this.IntervalUnit != IntervalUnit.Minute && this.IntervalUnit != IntervalUnit.Hour)
                    {
                        throw new InvalidIntervalUnitException("IntervalUnit (" + this.IntervalUnit.ToString() + ") non accettata per il periodo selezionato (" + this.Period + ")");
                    }

                    weekScheduler.WithInterval(this.Interval, this.IntervalUnit);


                    if (this.LifeUnit == IntervalUnit.Hour)
                    {
                        weekScheduler.EndingDailyAt(new TimeOfDay(this.StartDate.AddHours(this.Life).Hour, this.StartDate.Minute, this.StartDate.Minute));
                    }
                    else if (this.LifeUnit == IntervalUnit.Minute)
                    {
                        weekScheduler.EndingDailyAt(new TimeOfDay(this.StartDate.AddMinutes(this.Life).Hour, this.StartDate.AddMinutes(this.Life).Minute, this.StartDate.Minute));
                    }
                    else
                    {
                        throw new InvalidLifeUnitException("LifeUnit (" + this.LifeUnit.ToString() + ") non accettata per il periodo selezinato (" + this.Period + ")");
                    }
                }
                else
                {
                    weekScheduler.WithInterval(24, IntervalUnit.Hour);
                }
                trigger.WithSchedule(weekScheduler);
                break;

            case PeriodType.Mensile:
                var monthsScheduler = CalendarIntervalScheduleBuilder
                                      .Create()
                                      .InTimeZone(TimeZoneInfo.Local);
                if (this.Interval > 0)
                {
                    if (this.IntervalUnit != IntervalUnit.Day && this.IntervalUnit != IntervalUnit.Week)
                    {
                        throw new InvalidIntervalUnitException("IntervalUnit (" + this.IntervalUnit.ToString() + ") non accettata per il periodo selezionato (" + this.Period + ")");
                    }

                    trigger.WithCalendarIntervalSchedule(x =>
                    {
                        x.WithInterval(this.Interval, this.IntervalUnit);
                    });

                    if (this.LifeUnit == IntervalUnit.Day)
                    {
                        trigger.EndAt(new DateTimeOffset(this.StartDate.AddDays(this.Life)));
                    }
                    else if (this.LifeUnit == IntervalUnit.Week)
                    {
                        trigger.EndAt(new DateTimeOffset(this.StartDate.AddDays((7 * this.Life))));
                    }
                    else
                    {
                        throw new InvalidLifeUnitException("LifeUnit (" + this.LifeUnit.ToString() + ") non accettata per il periodo selezinato (" + this.Period + ")");
                    }
                }
                else
                {
                    monthsScheduler.WithInterval(1, IntervalUnit.Month);
                }
                trigger.StartAt(new DateTimeOffset(this.StartDate));
                break;

            case PeriodType.Annuale:
                var yearScheduler = CalendarIntervalScheduleBuilder
                                    .Create()
                                    .InTimeZone(TimeZoneInfo.Local);
                if (this.Interval > 0)
                {
                    if (this.IntervalUnit != IntervalUnit.Year && this.IntervalUnit != IntervalUnit.Month)
                    {
                        throw new InvalidIntervalUnitException("IntervalUnit (" + this.IntervalUnit.ToString() + ") non accettata per il periodo selezionato (" + this.Period + ")");
                    }

                    trigger.WithCalendarIntervalSchedule(x =>
                    {
                        x.WithInterval(this.Interval, this.IntervalUnit);
                    });

                    if (this.LifeUnit == IntervalUnit.Year)
                    {
                        trigger.EndAt(new DateTimeOffset(this.StartDate.AddDays(this.Life)));
                    }
                    else if (this.LifeUnit == IntervalUnit.Month)
                    {
                        trigger.EndAt(new DateTimeOffset(this.StartDate.AddDays((30 * this.Life))));
                    }
                    else
                    {
                        throw new InvalidLifeUnitException("LifeUnit (" + this.LifeUnit.ToString() + ") non accettata per il periodo selezinato (" + this.Period + ")");
                    }
                }
                else
                {
                    yearScheduler.WithInterval(1, IntervalUnit.Year);
                }
                trigger.StartAt(new DateTimeOffset(this.StartDate));
                break;

            default:
                return(null);
            }
            return(trigger.Build());
        }
Exemplo n.º 20
0
        /// <summary>
        /// 添加简单重复执行任务
        /// </summary>
        /// <param name="jobName">任务名称</param>
        /// <param name="starTime">开始时间</param>
        /// <param name="endTime">结束时间</param>
        /// <param name="keyValue">任务主键</param>
        /// <param name="value">间隔值</param>
        /// <param name="type">间隔类型</param>
        public static void AddRepeatJob(string jobName, string starTime, string endTime, string keyValue, int value, string type)
        {
            try
            {
                IScheduler sched = schedFact.GetScheduler();            //得到一个调度程序

                IJobDetail job = JobBuilder.Create <SchedulingHelper>() //新建任务执行类
                                 .WithIdentity(jobName, "lrts")         // name "myJob", group "group1"
                                 .UsingJobData("keyValue", keyValue)    //传递参数
                                 .Build();
                ///开始时间处理
                DateTime StarTime = DateTime.Now;
                if (!string.IsNullOrEmpty(starTime))
                {
                    StarTime = Convert.ToDateTime(starTime);
                }
                DateTimeOffset starRunTime = DateBuilder.NextGivenSecondDate(StarTime, 1);
                ///结束时间处理
                DateTime EndTime = DateTime.MaxValue.AddDays(-1);
                if (!string.IsNullOrEmpty(endTime))
                {
                    EndTime = Convert.ToDateTime(endTime);
                }
                DateTimeOffset endRunTime = DateBuilder.NextGivenSecondDate(EndTime, 1);
                ITrigger       trigger    = null;

                switch (type)
                {
                case "minute":     // 分钟
                    trigger = TriggerBuilder.Create().WithIdentity(jobName, "lrts")
                              .StartAt(starRunTime)
                              .EndAt(endRunTime)
                              .WithSimpleSchedule(t =>
                                                  t.WithIntervalInMinutes(value)
                                                  .RepeatForever())
                              .Build();
                    break;

                case "hours":     // 小时
                    trigger = TriggerBuilder.Create()
                              .WithIdentity(jobName, "lrts")
                              .StartAt(starRunTime)
                              .EndAt(endRunTime)
                              .WithSimpleSchedule(t =>
                                                  t.WithIntervalInHours(value)
                                                  .RepeatForever())
                              .Build();
                    break;

                case "day":     // 天
                    trigger = TriggerBuilder.Create()
                              .WithIdentity(jobName, "lrts")
                              .StartAt(starRunTime)
                              .EndAt(endRunTime)
                              .WithSchedule(
                        CalendarIntervalScheduleBuilder.Create()
                        .WithIntervalInDays(value)
                        )
                              .Build();
                    break;

                case "week":    // 周
                    trigger = TriggerBuilder.Create()
                              .WithIdentity(jobName, "lrts")
                              .StartAt(starRunTime)
                              .EndAt(endRunTime)
                              .WithSchedule(
                        CalendarIntervalScheduleBuilder.Create()
                        .WithIntervalInWeeks(value)
                        )
                              .Build();
                    break;
                }
                //实例化
                sched.ScheduleJob(job, trigger);
                //启动
                if (!sched.IsStarted)
                {
                    sched.Start();
                }
            }
            catch (Exception e)
            {
                throw (e);
            }
        }