Пример #1
0
        public void TestDirectivesOverwriteWithNoIgnoreDups()
        {
            IScheduler scheduler = null;

            try
            {
                StdSchedulerFactory factory = new StdSchedulerFactory();
                scheduler = factory.GetScheduler();

                // Setup existing job with same names as in xml data.
                string     job1    = Guid.NewGuid().ToString();
                IJobDetail job     = JobBuilder.Create <NoOpJob>().WithIdentity(job1).Build();
                ITrigger   trigger = TriggerBuilder.Create().WithIdentity(job1).WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever()).Build();
                scheduler.ScheduleJob(job, trigger);

                string job2 = Guid.NewGuid().ToString();
                job     = JobBuilder.Create <NoOpJob>().WithIdentity(job2).Build();
                trigger = TriggerBuilder.Create().WithIdentity(job2).WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever()).Build();
                scheduler.ScheduleJob(job, trigger);

                // Now load the xml data with directives: overwrite-existing-data=false, ignore-duplicates=true
                XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper());
                processor.ProcessStream(ReadJobXmlFromEmbeddedResource("directives_overwrite_no-ignoredups.xml"), "temp");
                Assert.That(scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEquals("DEFAULT")).Count, Is.EqualTo(2));
                Assert.That(scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupEquals("DEFAULT")).Count, Is.EqualTo(2));
            }
            finally
            {
                if (scheduler != null)
                {
                    scheduler.Shutdown();
                }
            }
        }
Пример #2
0
        static void ConfigureScheduler(ServiceConfigurator <ServiceCore> svc)
        {
            svc.ScheduleQuartzJob(q =>
            {
                //ClearUrlAccessedLog
                q.WithJob(JobBuilder.Create <ClearUrlAccessedLogJob>()
                          .WithIdentity("ClearUrlAccessedLog", "BackgroundJob")
                          .Build);
                q.AddTrigger(() => TriggerBuilder.Create()
                             .WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever(24)).Build());
            }, true);

            svc.ScheduleQuartzJob(q =>
            {
                //SendMessageJob
                q.WithJob(JobBuilder.Create <SendMessageJob>()
                          .WithIdentity("SendMessageJob", "BackgroundJob")
                          .Build);
                q.AddTrigger(() => TriggerBuilder.Create()
                             .WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForever(30)).Build());
            }, true);

            svc.ScheduleQuartzJob(q =>
            {
                //PMJob
                q.WithJob(JobBuilder.Create <PMJob>()
                          .WithIdentity("PMJob", "BackgroundJob")
                          .Build);
                q.AddTrigger(() => TriggerBuilder.Create()
                             .WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForever(30)).Build());
            }, true);
        }
Пример #3
0
        private static ITrigger DefineIntervalTrigger(string identity, DateTime startTime, IntervalType intervalType, int span, int count)
        {
            var trigger = TriggerBuilder.Create()
                          .WithIdentity(identity, Guid.NewGuid().ToString());

            trigger.StartAt(startTime);
            switch (intervalType)
            {
            case IntervalType.Hourly:
                trigger.WithSchedule(count == 0
                        ? SimpleScheduleBuilder.RepeatHourlyForever(span)
                        : SimpleScheduleBuilder.RepeatHourlyForTotalCount(count, span));
                break;

            case IntervalType.Minutely:
                trigger.WithSchedule(count == 0
                        ? SimpleScheduleBuilder.RepeatMinutelyForever(span)
                        : SimpleScheduleBuilder.RepeatMinutelyForTotalCount(count, span));
                break;

            case IntervalType.Secondly:
                trigger.WithSchedule(count == 0
                        ? SimpleScheduleBuilder.RepeatSecondlyForever(span)
                        : SimpleScheduleBuilder.RepeatSecondlyForTotalCount(count, span));
                break;

            case IntervalType.None:
                break;

            default:
                break;
            }
            return(trigger.Build());
        }
Пример #4
0
        public void TesDirectivesNoOverwriteWithIgnoreDups()
        {
            // create temp file
            string tempFileName = XMLSchedulingDataProcessor.QuartzXmlFileName;

            using (TextWriter writer = new StreamWriter(tempFileName, false))
            {
                using (StreamReader reader = new StreamReader(ReadJobXmlFromEmbeddedResource("directives_overwrite_no-ignoredups.xml")))
                {
                    writer.Write(reader.ReadToEnd());
                    writer.Flush();
                    writer.Close();
                }
            }

            IScheduler scheduler = null;

            try
            {
                StdSchedulerFactory factory = new StdSchedulerFactory();
                scheduler = StdSchedulerFactory.GetDefaultScheduler();

                // Setup existing job with same names as in xml data.
                IJobDetail job = JobBuilder.Create <NoOpJob>()
                                 .WithIdentity("job1")
                                 .Build();

                ITrigger trigger = TriggerBuilder.Create()
                                   .WithIdentity("job1")
                                   .WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever()).Build();

                scheduler.ScheduleJob(job, trigger);

                job = JobBuilder.Create <NoOpJob>()
                      .WithIdentity("job2")
                      .Build();

                trigger = TriggerBuilder.Create().WithIdentity("job2").WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever()).Build();
                scheduler.ScheduleJob(job, trigger);

                // Now load the xml data with directives: overwrite-existing-data=false, ignore-duplicates=true
                ITypeLoadHelper loadHelper = new SimpleTypeLoadHelper();
                loadHelper.Initialize();
                XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(loadHelper);
                processor.ProcessFileAndScheduleJobs(tempFileName, scheduler);
                Assert.AreEqual(2, scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEquals("DEFAULT")).Count);
                Assert.AreEqual(2, scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupEquals("DEFAULT")).Count);
            }
            finally
            {
                if (scheduler != null)
                {
                    scheduler.Shutdown();
                }
            }
        }
Пример #5
0
        private static void ScheduleSyncTeamsJob(IScheduler scheduler)
        {
            var syncTeamsJob     = JobBuilder.Create <SyncTeamsJob>().Build();
            var syncTeamsTrigger =
                TriggerBuilder
                .Create()
                .StartNow()
                .WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever(1))
                .Build();

            scheduler.ScheduleJob(syncTeamsJob, syncTeamsTrigger).ConfigureAwait(true);
        }
Пример #6
0
        private static ITrigger DefineIntervalTrigger(string _identity, DateTime _startTime, IntervalType _intervalType, int span, int count)
        {
            ITrigger trigger;
            var      _trigger = TriggerBuilder.Create()
                                .WithIdentity(_identity, Guid.NewGuid().ToString());

            _trigger.StartAt(_startTime);
            switch (_intervalType)
            {
            case IntervalType.Hourly:
                if (count == 0)
                {
                    _trigger.WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever(span));
                }
                else
                {
                    _trigger.WithSchedule(SimpleScheduleBuilder.RepeatHourlyForTotalCount(count, span));
                }
                break;

            case IntervalType.Minutely:
                if (count == 0)
                {
                    _trigger.WithSchedule(SimpleScheduleBuilder.RepeatMinutelyForever(span));
                }
                else
                {
                    _trigger.WithSchedule(SimpleScheduleBuilder.RepeatMinutelyForTotalCount(count, span));
                }
                break;

            case IntervalType.Secondly:
                if (count == 0)
                {
                    _trigger.WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForever(span));
                }
                else
                {
                    _trigger.WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForTotalCount(count, span));
                }
                break;

            default:
                break;
            }
            trigger = _trigger.Build();
            return(trigger);
        }
Пример #7
0
        protected override void OnStart(string[] args)
        {
            LogHelper.Log.Info("正在启动....");
            if (RepositoryService.TestWriteConnection())
            {
                LogHelper.Log.Info("写数据库连接正常");
            }
            else
            {
                LogHelper.Log.Info("写数据库连接异常");
                return;
            }
            if (RepositoryService.TestReadConnection())
            {
                LogHelper.Log.Info("读数据库连接正常");
            }
            else
            {
                LogHelper.Log.Info("读数据库连接异常");
                return;
            }
            LogHelper.Log.Info("服务已启动");

            DateTimeOffset runTime = DateBuilder.TodayAt(01, 00, 00);
            ITrigger       trigger = TriggerBuilder.Create()
                                     .WithIdentity("trigger1", "group1")
                                     .StartAt(runTime).WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever(24))
                                     .Build();

            IJobDetail detail = JobBuilder.Create <CheckAccoutJob>().WithIdentity("job1", "group1").Build();

            ISchedulerFactory sf = new StdSchedulerFactory();

            sched = sf.GetScheduler();
            sched.ScheduleJob(detail, trigger);

            sched.Start();

            LogHelper.Log.Info("调度任务已启动");
        }
Пример #8
0
        public void TestOverwriteFlag()
        {
            // create temp file
            string tempFileName = XMLSchedulingDataProcessor.QuartzXmlFileName;

            using (TextWriter writer = new StreamWriter(tempFileName, false))
            {
                using (StreamReader reader = new StreamReader(ReadJobXmlFromEmbeddedResource("SimpleJobTrigger.xml")))
                {
                    writer.Write(reader.ReadToEnd());
                    writer.Flush();
                    writer.Close();
                }
            }

            IScheduler scheduler = null;

            try
            {
                StdSchedulerFactory factory = new StdSchedulerFactory();
                scheduler = StdSchedulerFactory.GetDefaultScheduler();

                // Let's setup a fixture job data that we know test is not going modify it.
                IJobDetail job = JobBuilder.Create <NoOpJob>()
                                 .WithIdentity("job1").UsingJobData("foo", "dont_chg_me").Build();
                ITrigger trigger = TriggerBuilder.Create().WithIdentity("job1").WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever()).Build();
                scheduler.ScheduleJob(job, trigger);

                XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper());
                try
                {
                    processor.ProcessFileAndScheduleJobs(scheduler, false);
                    Assert.Fail("OverWriteExisting flag didn't work. We should get Exception when overwrite is set to false.");
                }
                catch (ObjectAlreadyExistsException)
                {
                    // This is expected. Do nothing.
                }

                // We should still have what we start with.
                Assert.AreEqual(1, scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEquals("DEFAULT")).Count);
                Assert.AreEqual(1, scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupEquals("DEFAULT")).Count);

                job = scheduler.GetJobDetail(JobKey.Create("job1"));
                String fooValue = job.JobDataMap.GetString("foo");
                Assert.AreEqual("dont_chg_me", fooValue);
            }
            finally
            {
                if (File.Exists(tempFileName))
                {
                    File.Delete(tempFileName);
                }

                // shutdown scheduler
                if (scheduler != null)
                {
                    scheduler.Shutdown();
                }
            }
        }
Пример #9
0
        static void ConfigureScheduler(ServiceConfigurator <ServiceCore> svc)
        {
            svc.ScheduleQuartzJob(q =>
            {
                //ClearUrlAccessedLog
                q.WithJob(JobBuilder.Create <ClearUrlAccessedLogJob>()
                          .WithIdentity("ClearUrlAccessedLog", "BackgroundJob")
                          .Build);
                q.AddTrigger(() => TriggerBuilder.Create()
                             .WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever(24)).Build());
            }, true);

            svc.ScheduleQuartzJob(q =>
            {
                //SendMessageJob
                q.WithJob(JobBuilder.Create <SendMessageJob>()
                          .WithIdentity("SendMessageJob", "BackgroundJob")
                          .Build);
                q.AddTrigger(() => TriggerBuilder.Create()
                             .WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForever(30)).Build());
            }, true);

            svc.ScheduleQuartzJob(q =>
            {
                //ReorderItemsJob
                q.WithJob(JobBuilder.Create <ReorderItemsJob>()
                          .WithIdentity("ReorderItemsJob", "BackgroundJob")
                          .Build);
                q.AddTrigger(() => TriggerBuilder.Create()
                             .WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever(8)).Build());
            }, true);

            svc.ScheduleQuartzJob(q =>
            {
                //PMJob
                q.WithJob(JobBuilder.Create <PMJob>()
                          .WithIdentity("PMJob", "BackgroundJob")
                          .Build);
                q.AddTrigger(() => TriggerBuilder.Create()
                             .WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForever(30)).Build());
            }, true);

            //svc.ScheduleQuartzJob(q =>
            //{
            //    //SLANotificationJob
            //    q.WithJob(JobBuilder.Create<TenantPaymentJob>()
            //        .WithIdentity("TenantPaymentJob", "BackgroundJob")
            //        .Build);
            //    q.AddTrigger(() => TriggerBuilder.Create()
            //        .WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForever(30)).Build());

            //}, true);

            //svc.ScheduleQuartzJob(q =>
            //{
            //    //TenantPaymentJob
            //    q.WithJob(JobBuilder.Create<TenantPaymentJob>()
            //        .WithIdentity("TenantPaymentJob", "BackgroundJob")
            //        .Build);
            //    q.AddTrigger(() => TriggerBuilder.Create()
            //        .WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForever(45)).Build());

            //}, true);
        }
        public async Task TesDirectivesNoOverwriteWithIgnoreDups()
        {
            // create temp file
            string tempFileName = XMLSchedulingDataProcessor.QuartzXmlFileName;

            using (TextWriter writer = new StreamWriter(File.OpenWrite(tempFileName)))
            {
                using (StreamReader reader = new StreamReader(ReadJobXmlFromEmbeddedResource("directives_overwrite_no-ignoredups.xml")))
                {
                    await writer.WriteAsync(await reader.ReadToEndAsync());

                    await writer.FlushAsync();
                }
            }

            IScheduler scheduler = null;

            try
            {
                NameValueCollection properties = new NameValueCollection();
                properties["quartz.serializer.type"] = TestConstants.DefaultSerializerType;

                StdSchedulerFactory factory = new StdSchedulerFactory(properties);
                scheduler = await factory.GetScheduler();

                // Setup existing job with same names as in xml data.
                IJobDetail job = JobBuilder.Create <NoOpJob>()
                                 .WithIdentity("job1")
                                 .Build();

                ITrigger trigger = TriggerBuilder.Create()
                                   .WithIdentity("job1")
                                   .WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever()).Build();

                await scheduler.ScheduleJob(job, trigger);

                job = JobBuilder.Create <NoOpJob>()
                      .WithIdentity("job2")
                      .Build();

                trigger = TriggerBuilder.Create().WithIdentity("job2").WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever()).Build();
                await scheduler.ScheduleJob(job, trigger);

                // Now load the xml data with directives: overwrite-existing-data=false, ignore-duplicates=true
                ITypeLoadHelper loadHelper = new SimpleTypeLoadHelper();
                loadHelper.Initialize();
                XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(loadHelper);
                await processor.ProcessFileAndScheduleJobs(tempFileName, scheduler);

                var jobKeys = await scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEquals("DEFAULT"));

                Assert.AreEqual(2, jobKeys.Count);
                var triggerKeys = await scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupEquals("DEFAULT"));

                Assert.AreEqual(2, triggerKeys.Count);
            }
            finally
            {
                if (scheduler != null)
                {
                    await scheduler.Shutdown();
                }
            }
        }
        public async Task TestOverwriteFlag()
        {
            // create temp file
            string tempFileName = XMLSchedulingDataProcessor.QuartzXmlFileName;

            // Use File.Create (as opposed to File.OpenWrite) so that if the file already exists, it will be completely
            // replaced instead of only overwriting the first N bytes (where N is the length of SimpleJobTrigger.xml)
            using (TextWriter writer = new StreamWriter(File.Create(tempFileName)))
            {
                using (StreamReader reader = new StreamReader(ReadJobXmlFromEmbeddedResource("SimpleJobTrigger.xml")))
                {
                    await writer.WriteAsync(await reader.ReadToEndAsync());

                    await writer.FlushAsync();
                }
            }

            IScheduler scheduler = null;

            try
            {
                var properties = new NameValueCollection();
                properties["quartz.serializer.type"] = TestConstants.DefaultSerializerType;
                StdSchedulerFactory factory = new StdSchedulerFactory(properties);
                scheduler = await factory.GetScheduler();

                // Let's setup a fixture job data that we know test is not going modify it.
                IJobDetail job = JobBuilder.Create <NoOpJob>()
                                 .WithIdentity("job1").UsingJobData("foo", "dont_chg_me").Build();
                ITrigger trigger = TriggerBuilder.Create().WithIdentity("job1").WithSchedule(SimpleScheduleBuilder.RepeatHourlyForever()).Build();
                await scheduler.ScheduleJob(job, trigger);

                XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper());
                try
                {
                    await processor.ProcessFileAndScheduleJobs(scheduler, false);

                    Assert.Fail("OverWriteExisting flag didn't work. We should get Exception when overwrite is set to false.");
                }
                catch (ObjectAlreadyExistsException)
                {
                    // This is expected. Do nothing.
                }

                // We should still have what we start with.
                var jobKeys = await scheduler.GetJobKeys(GroupMatcher <JobKey> .GroupEquals("DEFAULT"));

                Assert.AreEqual(1, jobKeys.Count);
                var triggerKeys = await scheduler.GetTriggerKeys(GroupMatcher <TriggerKey> .GroupEquals("DEFAULT"));

                Assert.AreEqual(1, triggerKeys.Count);

                job = await scheduler.GetJobDetail(JobKey.Create("job1"));

                string fooValue = job.JobDataMap.GetString("foo");
                Assert.AreEqual("dont_chg_me", fooValue);
            }
            finally
            {
                if (File.Exists(tempFileName))
                {
                    File.Delete(tempFileName);
                }

                // shutdown scheduler
                if (scheduler != null)
                {
                    await scheduler.Shutdown();
                }
            }
        }
Пример #12
0
        public void AddAndScheduleGenericJob <T>(string jobName, string jobGroupName, string triggerName, string triggerGroupName, QuickRepeatIntervals quickRepeatInterval, int intervalValue, int?nTimes) where T : class
        {
            IScheduler scheduler = GetScheduler();

            JobDetailImpl jobDetail = new JobDetailImpl(jobName, jobGroupName, typeof(T));

            ITrigger trigger = null;

            switch (quickRepeatInterval)
            {
            case QuickRepeatIntervals.EverySecond:
                trigger = TriggerBuilder.Create()
                          .StartNow()
                          .WithIdentity(triggerName, triggerGroupName)
                          .WithSchedule(nTimes.HasValue ? SimpleScheduleBuilder.RepeatSecondlyForTotalCount(nTimes.Value, intervalValue) : SimpleScheduleBuilder.RepeatSecondlyForever(intervalValue))
                          .Build();
                break;

            case QuickRepeatIntervals.EveryMinute:
                trigger = TriggerBuilder.Create()
                          .StartNow()
                          .WithIdentity(triggerName, triggerGroupName)
                          .WithSchedule(nTimes.HasValue ? SimpleScheduleBuilder.RepeatMinutelyForTotalCount(nTimes.Value, intervalValue) : SimpleScheduleBuilder.RepeatMinutelyForever(intervalValue))
                          .Build();
                break;

            case QuickRepeatIntervals.EveryHour:
                trigger = TriggerBuilder.Create()
                          .StartNow()
                          .WithIdentity(triggerName, triggerGroupName)
                          .WithSchedule(nTimes.HasValue ? SimpleScheduleBuilder.RepeatHourlyForTotalCount(nTimes.Value, intervalValue) : SimpleScheduleBuilder.RepeatHourlyForever(intervalValue))
                          .Build();
                break;
            }

            scheduler.ScheduleJob(jobDetail, trigger);
            //scheduler.Shutdown();
        }