/// <summary> /// 启动 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void btnStart_Click(object sender, EventArgs e) { try { await MQTTContext.getInstance(). Initialize(txtServer.Text.Trim(), int.Parse(txtPort.Text.Trim()), notification); if (_scheduler == null) { _scheduler = await StdSchedulerFactory.GetDefaultScheduler(); //任务、触发器执行配置 XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); Stream s = new StreamReader(AppDomain.CurrentDomain.BaseDirectory + @"\Quartz.config").BaseStream; await processor.ProcessStream(s, null); await processor.ScheduleJobs(_scheduler); await _scheduler.Start(); } btnStart.Enabled = false; btnStop.Enabled = true; } catch (Exception ex) { showMessage(ex.Message); } }
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(); } } }
public void SetUp() { processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); mockScheduler = A.Fake <IScheduler>(); A.CallTo(() => mockScheduler.GetJobDetail(A <JobKey> ._, A <CancellationToken> ._)).Returns(Task.FromResult <IJobDetail>(null)); A.CallTo(() => mockScheduler.GetTrigger(A <TriggerKey> ._, A <CancellationToken> ._)).Returns(Task.FromResult <ITrigger>(null)); }
private async Task ProcessFile(JobFile jobFile, CancellationToken cancellationToken = default(CancellationToken)) { if ((jobFile == null) || (jobFile.FileFound == false)) { return; } try { XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(TypeLoadHelper); processor.AddJobGroupToNeverDelete(JobInitializationPluginName); processor.AddTriggerGroupToNeverDelete(JobInitializationPluginName); await processor.ProcessFileAndScheduleJobs( jobFile.FileName, jobFile.FileName, // systemId Scheduler, cancellationToken).ConfigureAwait(false); } catch (Exception e) { Log.ErrorException("Error scheduling jobs: " + e.Message, e); } }
private void ProcessFile(JobFile jobFile) { if ((jobFile == null) || (jobFile.FileFound == false)) { return; } try { XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(TypeLoadHelper); processor.AddJobGroupToNeverDelete(JobInitializationPluginName); processor.AddTriggerGroupToNeverDelete(JobInitializationPluginName); processor.ProcessFileAndScheduleJobs( jobFile.FileName, jobFile.FileName, // systemId scheduler); } catch (Exception e) { var message = "Could not schedule jobs and triggers from file " + jobFile.FileName + ": " + e.Message; if (FailOnSchedulingError) { throw new SchedulerException(message, e); } else { Log.Error(message, e); } } }
public void TestRemoveJobTypeNotFound() { NameValueCollection properties = new NameValueCollection(); properties["quartz.scheduler.instanceName"] = "TestScheduler"; properties["quartz.scheduler.instanceId"] = "AUTO"; properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"; properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz"; properties["quartz.jobStore.dataSource"] = "default"; properties["quartz.jobStore.tablePrefix"] = "QRTZ_"; properties["quartz.dataSource.default.connectionString"] = "Server=(local);Database=quartz;Trusted_Connection=True;"; properties["quartz.dataSource.default.provider"] = "SqlServer-20"; // First we must get a reference to a scheduler ISchedulerFactory sf = new StdSchedulerFactory(properties); IScheduler scheduler = sf.GetScheduler(); try { string jobName = Guid.NewGuid().ToString(); IJobDetail jobDetail = JobBuilder.Create <NoOpJob>().WithIdentity(jobName, "DEFAULT").StoreDurably().Build(); ITrigger trigger = TriggerBuilder.Create().WithIdentity(jobName).WithSchedule(CronScheduleBuilder.CronSchedule("* * * * * ?")).Build(); scheduler.ScheduleJob(jobDetail, trigger); ModifyStoredJobType(); XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); // when processor.ProcessStream(ReadJobXmlFromEmbeddedResource("MissingJobType.xml"), "temp"); } finally { scheduler.Shutdown(false); } }
private async Task ProcessFile(JobFile?jobFile, CancellationToken cancellationToken = default) { if (jobFile == null || jobFile.FileFound == false) { return; } try { XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(TypeLoadHelper); processor.AddJobGroupToNeverDelete(JobInitializationPluginName); processor.AddTriggerGroupToNeverDelete(JobInitializationPluginName); await processor.ProcessFileAndScheduleJobs( jobFile.FileName, jobFile.FileName, // systemId Scheduler, cancellationToken).ConfigureAwait(false); } catch (Exception e) { var message = "Could not schedule jobs and triggers from file " + jobFile.FileName + ": " + e.Message; if (FailOnSchedulingError) { throw new SchedulerException(message, e); } else { Log.ErrorException(message, e); } } }
static Job() { XMLSchedulingDataProcessor xMLSchedulingDataProcessor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); IScheduler scheduler = (new StdSchedulerFactory()).GetScheduler(); xMLSchedulingDataProcessor.ProcessFileAndScheduleJobs(IOHelper.GetMapPath("/quartz_jobs.xml"), scheduler); scheduler.Start(); }
static Job() { XMLSchedulingDataProcessor xMLSchedulingDataProcessor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); IScheduler scheduler = (new StdSchedulerFactory()).GetScheduler(); xMLSchedulingDataProcessor.ProcessFileAndScheduleJobs(AppDomain.CurrentDomain.BaseDirectory + "/quartz_jobs.xml", scheduler); scheduler.Start(); }
public QuartzJobs() { sf = new StdSchedulerFactory(); processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); Init(); JobCfgFileWatch(); }
public void Start() { if (!IsStop) { return; } if (sched != null && !sched.IsShutdown) { IsStop = true; return; } sf = new StdSchedulerFactory(); processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); try { if (sf.GetScheduler(Name) == null) { sched = sf.GetScheduler(); } else { sched = sf.GetScheduler(Name); } processor.ProcessFileAndScheduleJobs(JobsConfigPath, sched); if (GlobalJobListener == null) { if (GlobalBeforeExecuted != null || GlobalAfterExecuted != null) { GlobalJobListener = new QuartzJobsListener(Name, GlobalBeforeExecuted, GlobalAfterExecuted); } } if (GlobalJobListener != null) { if (sched.ListenerManager.GetJobListener(Name) == null) { sched.ListenerManager.AddJobListener(GlobalJobListener, null); } } sched.Start(); IsStop = false; } catch (Exception ex) { Log.Error(ex.ToString()); if (sched != null && sched.IsShutdown) { Start(); } } Log.Info(string.Concat("QuartzScheduler:“", Name, "”启动!", JobsConfigPath)); }
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(); } } }
public QuartzJobs(string jobsconfigpath) { this.jobsconfigpath = jobsconfigpath; sf = new StdSchedulerFactory(); processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); Init(); JobCfgFileWatch(); }
public ServiceRunner() { // 从配置中读取计划执行策略 XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); ISchedulerFactory sf = new StdSchedulerFactory(); scheduler = sf.GetScheduler(); // quartz_jobs.xml文件路径 processor.ProcessFileAndScheduleJobs("~/Configs/quartz_jobs.xml", scheduler); }
// 手動加載配置文件 public void Test04() { XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler scheduler = sf.GetScheduler(); processor.ProcessFileAndScheduleJobs("~/quartz.xml", scheduler); scheduler.Start(); scheduler.Shutdown(); }
public static void State() { //开启调度 JobBase.Scheduler.Start(); XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); processor.ProcessFileAndScheduleJobs("~/Jobs.xml", JobBase.Scheduler); // 第一个参数是你要执行的工作(job) 第二个参数是这个工作所对应的触发器(Trigger)(例如:几秒或几分钟执行一次) //JobBase.AddSchedule(new JobServer<AddMassagejob>(), // new AddMasagerTriggerServer().AddMasagerTrigger(), "每隔五分钟向文本中写入文字", "消息工作"); }
public void SetUp() { processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); #if FAKE_IT_EASY mockScheduler = A.Fake <IScheduler>(); A.CallTo(() => mockScheduler.GetJobDetail(A <JobKey> ._)).Returns(Task.FromResult <IJobDetail>(null)); A.CallTo(() => mockScheduler.GetTrigger(A <TriggerKey> ._)).Returns(Task.FromResult <ITrigger>(null)); #endif #if TRANSACTIONS scope = new TransactionScope(); #endif }
static JobScheduler() { try { XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); StdSchedulerFactory factory = new StdSchedulerFactory(); scheduler = factory.GetScheduler().GetAwaiter().GetResult(); processor.ProcessFileAndScheduleJobs("~/quartz_jobs.xml", scheduler); } catch (System.Exception ex) { Logger.Error(ex, $"任务加载异常。"); } }
// 手動加載配置文件 public void Test03() { XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler scheduler = sf.GetScheduler(); Stream s = new StreamReader("~/quartz.xml").BaseStream; processor.ProcessStream(s, null); processor.ScheduleJobs(scheduler); scheduler.Start(); scheduler.Shutdown(); }
private async Task RestartScheduler() { if (_scheduler != null && _scheduler.IsStarted) { await _scheduler.Standby(); _scheduler = null; } XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); _scheduler = await _schedulerFactory.GetScheduler(); await processor.ProcessFileAndScheduleJobs("~/quartz_jobs.xml", _scheduler); await _scheduler.Start(); }
public async Task Start(DispatcherConfigModel config) { if (config.EnableLog) { var logProvider = _serviceProvider.GetService <ILogProvider>(); if (logProvider != null) { LogProvider.SetCurrentLogProvider(logProvider); } } _scheduler = await _scheduleManager.BuildScheduler(config.SchedulerConfig); var processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); await processor.ProcessFileAndScheduleJobs(config.DispatcherConfigFilePath, _scheduler); await _scheduler.Start(); }
public void TestRemoveJobTypeNotFound() { var scheduler = CreateDbBackedScheduler(); try { string jobName = "testjob1"; IJobDetail jobDetail = JobBuilder.Create <NoOpJob>() .WithIdentity(jobName, "DEFAULT") .UsingJobData("foo", "foo") .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity(jobName, "DEFAULT") .WithSchedule(CronScheduleBuilder.CronSchedule("* * * * * ?")) .Build(); scheduler.ScheduleJob(jobDetail, trigger); IJobDetail jobDetail2 = scheduler.GetJobDetail(jobDetail.Key); ITrigger trigger2 = scheduler.GetTrigger(trigger.Key); Assert.That(jobDetail2.JobDataMap.GetString("foo"), Is.EqualTo("foo")); Assert.That(trigger2, Is.InstanceOf <ICronTrigger>()); ModifyStoredJobType(); XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); // when processor.ProcessStreamAndScheduleJobs(ReadJobXmlFromEmbeddedResource("delete-no-job-class.xml"), scheduler); jobDetail2 = scheduler.GetJobDetail(jobDetail.Key); trigger2 = scheduler.GetTrigger(trigger.Key); Assert.That(trigger2, Is.Null); Assert.That(jobDetail2, Is.Null); jobDetail2 = scheduler.GetJobDetail(new JobKey("job1", "DEFAULT")); trigger2 = scheduler.GetTrigger(new TriggerKey("job1", "DEFAULT")); Assert.That(jobDetail2.JobDataMap.GetString("foo"), Is.EqualTo("bar")); Assert.That(trigger2, Is.InstanceOf <ISimpleTrigger>()); } finally { scheduler.Shutdown(false); } }
static void Main(string[] args) { // var cts = new CancellationTokenSource(); AppDomain.CurrentDomain.ProcessExit += Processor_ProcessExit; AssemblyLoadContext.Default.Unloading += Processor_Unloading; Console.CancelKeyPress += Processor_CancelKeyPress; XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); ISchedulerFactory sf = new StdSchedulerFactory(); scheduler = sf.GetScheduler().Result; IJobDetail job = JobBuilder.Create <DdnsJob>().WithIdentity("DdnsJob", "DdnsJobGroup").Build(); int sec = 300; if (!int.TryParse(ConfigUtil.GetConfigVariableValue("RefreshIntervalInSecond", "300"), out sec)) { sec = 300; } ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create() .WithIdentity("DdnsJobTrigger", "DdnsJobTriggerGroup") .StartNow().WithSimpleSchedule(x => x.WithIntervalInSeconds(sec).RepeatForever()).Build(); scheduler.ScheduleJob(job, trigger); // processor.ProcessFileAndScheduleJobs("~/quartz_jobs.xml", scheduler); // scheduler = StdSchedulerFactory.GetDefaultScheduler().Result; scheduler.Start(); Console.WriteLine($"[{DateTime.Now}]:后台服务,启动成功!"); while (!_cs.IsCancellationRequested) { System.Threading.Thread.Sleep(1000); } return; }
static void Main(string[] args) { XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); //1.首先创建一个作业调度池 ISchedulerFactory schedf = new StdSchedulerFactory(); IScheduler sched = schedf.GetScheduler(); //2.创建出来一个具体的作业 // IJobDetail job = JobBuilder.Create<JobDemo>().Build(); //3.创建并配置一个触发器 // ISimpleTrigger trigger = WithIntervalInSeconds(); //4.加入作业调度池中 // sched.ScheduleJob(job, trigger); #region 读取xml文件,去掉,2,3,4 processor.ProcessFileAndScheduleJobs(AppDomain.CurrentDomain.BaseDirectory + "quartz_jobs.xml", sched); //Stream s = new StreamReader(AppDomain.CurrentDomain.BaseDirectory+"quartz_jobs.xml").BaseStream; //processor.ProcessStream(s, null); //processor.ScheduleJobs(sched); #endregion //5.开始运行 sched.Start(); Console.ReadKey(); }
public async Task RunAsync() { XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); _scheduler = await _schedulerFactory.GetScheduler(); //程序配置任务 var config = Config.LoadConfig(QCommon.Service.FileHelper.GetAbsolutePath("config\\appsettings.json"), false); DateTimeOffset startTime = DateBuilder.NextGivenSecondDate(null, 15); await createCronJob <BackupJob>(config.BackupCron, "backup"); await createCronJob <ClearJob>(config.ClearCron, "clear", d => { d.UsingJobData("logDay", "-7"); }); await createCronJob <FtpJob>(config.FtpCron, "ftp"); var ks = await _scheduler.GetTriggerKeys(Quartz.Impl.Matchers.GroupMatcher <TriggerKey> .AnyGroup()); logger.Info($"now has trigger {ks.Count}: {string.Join(",", ks.ToList().Select(r => r.Name).ToArray())}"); await _scheduler.Start(); }
private void ProcessFile(JobFile jobFile) { if ((jobFile == null) || (jobFile.FileFound == false)) { return; } try { XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(TypeLoadHelper); processor.AddJobGroupToNeverDelete(JobInitializationPluginName); processor.AddTriggerGroupToNeverDelete(JobInitializationPluginName); processor.ProcessFileAndScheduleJobs( jobFile.FileName, jobFile.FileName, // systemId scheduler); } catch (Exception) { } }
public void Start() { if (!File.Exists(ConfigHelper.QuartzSchedulerFile)) { return; } Task.Run(async() => { ISchedulerFactory sf = new StdSchedulerFactory(); _scheduler = await sf.GetScheduler(); string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ConfigHelper.QuartzSchedulerFile); XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); await processor.ProcessFileAndScheduleJobs(path, _scheduler); // ÉèÖüàÌýÆ÷ JobListener listener = new JobListener(); //IMatcher<JobKey> matcher = KeyMatcher<JobKey>.KeyEquals(key); //sched.ListenerManager.AddJobListener(listener, matcher); _scheduler.ListenerManager.AddJobListener(listener); await _scheduler.Start(); }); }
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(); } } }
public void SetUp() { processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); mockScheduler = MockRepository.GenerateMock<IScheduler>(); scope = new TransactionScope(); }
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(); } } }
public void TestOverwriteJobTypeNotFound() { IScheduler scheduler = CreateDbBackedScheduler(); try { string jobName = "job1"; IJobDetail jobDetail = JobBuilder.Create<NoOpJob>() .WithIdentity(jobName, "DEFAULT") .UsingJobData("foo", "foo") .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity(jobName, "DEFAULT") .WithSchedule(CronScheduleBuilder.CronSchedule("* * * * * ?")) .Build(); scheduler.ScheduleJob(jobDetail, trigger); IJobDetail jobDetail2 = scheduler.GetJobDetail(jobDetail.Key); ITrigger trigger2 = scheduler.GetTrigger(trigger.Key); Assert.That(jobDetail2.JobDataMap.GetString("foo"), Is.EqualTo("foo")); Assert.That(trigger2, Is.InstanceOf<ICronTrigger>()); ModifyStoredJobType(); XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); processor.ProcessStreamAndScheduleJobs(ReadJobXmlFromEmbeddedResource("overwrite-no-jobclass.xml"), scheduler); jobDetail2 = scheduler.GetJobDetail(jobDetail.Key); trigger2 = scheduler.GetTrigger(trigger.Key); Assert.That(jobDetail2.JobDataMap.GetString("foo"), Is.EqualTo("bar")); Assert.That(trigger2, Is.InstanceOf<ISimpleTrigger>()); } finally { scheduler.Shutdown(false); } }
public void SetUp() { processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); mockScheduler = MockRepository.GenerateMock <IScheduler>(); scope = new TransactionScope(); }
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(); } } }
/// <summary> /// Register jobs and triggers (within a transaction, if possible). /// </summary> protected virtual void RegisterJobsAndTriggers() { ITransactionStatus transactionStatus = null; if (transactionManager != null) { transactionStatus = transactionManager.GetTransaction(new DefaultTransactionDefinition()); } try { if (jobSchedulingDataLocations != null) { XMLSchedulingDataProcessor dataProcessor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); dataProcessor.OverWriteExistingData = overwriteExistingJobs; foreach (string location in jobSchedulingDataLocations) { dataProcessor.ProcessFileAndScheduleJobs(location, GetScheduler()); } } // Register JobDetails. if (jobDetails != null) { foreach (IJobDetail jobDetail in jobDetails) { AddJobToScheduler(jobDetail); } } else { // Create empty list for easier checks when registering triggers. jobDetails = new LinkedList(); } // Register Calendars. if (calendars != null) { foreach (DictionaryEntry entry in calendars) { string calendarName = (string) entry.Key; ICalendar calendar = (ICalendar) entry.Value; GetScheduler().AddCalendar(calendarName, calendar, true, true); } } // Register Triggers. if (triggers != null) { foreach (ITrigger trigger in triggers) { AddTriggerToScheduler(trigger); } } } catch (Exception ex) { if (transactionStatus != null) { try { transactionManager.Rollback(transactionStatus); } catch (TransactionException) { logger.Error("Job registration exception overridden by rollback exception", ex); throw; } } if (ex is SchedulerException) { throw; } throw new SchedulerException("Registration of jobs and triggers failed: " + ex.Message); } if (transactionStatus != null) { transactionManager.Commit(transactionStatus); } }
public void TestRemoveJobTypeNotFound() { NameValueCollection properties = new NameValueCollection(); properties["quartz.scheduler.instanceName"] = "TestScheduler"; properties["quartz.scheduler.instanceId"] = "AUTO"; properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz"; properties["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz"; properties["quartz.jobStore.dataSource"] = "default"; properties["quartz.jobStore.tablePrefix"] = "QRTZ_"; properties["quartz.dataSource.default.connectionString"] = "Server=(local);Database=quartz;Trusted_Connection=True;"; properties["quartz.dataSource.default.provider"] = "SqlServer-20"; // First we must get a reference to a scheduler ISchedulerFactory sf = new StdSchedulerFactory(properties); IScheduler scheduler = sf.GetScheduler(); try { string jobName = Guid.NewGuid().ToString(); IJobDetail jobDetail = JobBuilder.Create<NoOpJob>().WithIdentity(jobName, "DEFAULT").StoreDurably().Build(); ITrigger trigger = TriggerBuilder.Create().WithIdentity(jobName).WithSchedule(CronScheduleBuilder.CronSchedule("* * * * * ?")).Build(); scheduler.ScheduleJob(jobDetail, trigger); ModifyStoredJobType(); XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper()); // when processor.ProcessStream(ReadJobXmlFromEmbeddedResource("MissingJobType.xml"), "temp"); } finally { scheduler.Shutdown(false); } }
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(); } } }
private void ProcessFile(JobFile jobFile) { if ((jobFile == null) || (jobFile.FileFound == false)) { return; } try { XMLSchedulingDataProcessor processor = new XMLSchedulingDataProcessor(TypeLoadHelper); processor.AddJobGroupToNeverDelete(JobInitializationPluginName); processor.AddTriggerGroupToNeverDelete(JobInitializationPluginName); processor.ProcessFileAndScheduleJobs( jobFile.FileName, jobFile.FileName, // systemId scheduler); } catch (Exception e) { Log.Error("Error scheduling jobs: " + e.Message, e); } }
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(); } } }