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(); } } }
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); }
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()); }
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(); } } }
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); }
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); }
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("调度任务已启动"); }
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(); } } }
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(); } } }
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(); }