示例#1
0
        /// <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);
            }
        }
示例#2
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();
                }
            }
        }
 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));
 }
示例#4
0
        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);
                }
            }
        }
示例#6
0
        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);
            }
        }
示例#7
0
        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);
                }
            }
        }
示例#8
0
文件: Job.cs 项目: Shikyoh/HSWB2B2C
        static Job()
        {
            XMLSchedulingDataProcessor xMLSchedulingDataProcessor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper());
            IScheduler scheduler = (new StdSchedulerFactory()).GetScheduler();

            xMLSchedulingDataProcessor.ProcessFileAndScheduleJobs(IOHelper.GetMapPath("/quartz_jobs.xml"), scheduler);
            scheduler.Start();
        }
示例#9
0
        static Job()
        {
            XMLSchedulingDataProcessor xMLSchedulingDataProcessor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper());
            IScheduler scheduler = (new StdSchedulerFactory()).GetScheduler();

            xMLSchedulingDataProcessor.ProcessFileAndScheduleJobs(AppDomain.CurrentDomain.BaseDirectory + "/quartz_jobs.xml", scheduler);
            scheduler.Start();
        }
示例#10
0
        public QuartzJobs()
        {
            sf        = new StdSchedulerFactory();
            processor = new XMLSchedulingDataProcessor(new SimpleTypeLoadHelper());
            Init();

            JobCfgFileWatch();
        }
示例#11
0
        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));
        }
示例#12
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();
                }
            }
        }
示例#13
0
        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);
        }
示例#15
0
        // 手動加載配置文件
        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();
        }
示例#16
0
        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
        }
示例#18
0
 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, $"任务加载异常。");
     }
 }
示例#19
0
        // 手動加載配置文件
        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();
        }
示例#21
0
        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);
            }
        }
示例#23
0
        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;
        }
示例#24
0
        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();
        }
示例#25
0
        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)
            {
            }
        }
示例#27
0
        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);
            }
        }
示例#32
0
 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();
                }
            }
        }
示例#34
0
        /// <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);
            }
        }
示例#36
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();
                }
            }
        }
        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 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();
        }
        // 手動加載配置文件
        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 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();
                }
            }
        }