Пример #1
0
        private async Task Run()
        {
            try
            {
                // Grab the Scheduler instance from the Factory
                NameValueCollection props = new NameValueCollection
                {
                    { "quartz.serializer.type", "binary" }
                };
                StdSchedulerFactory factory = new StdSchedulerFactory(props);
                _scheduler = await factory.GetScheduler();

                var jobListener = new JobListener();
                jobListener.JobEndEvent += RefreshJobDetail;
                _scheduler.ListenerManager.AddJobListener(jobListener, GroupMatcher <JobKey> .AnyGroup());

                AddJobs();
                GetJobInfo();
                // and start it off
                await _scheduler.Start();
            }
            catch (SchedulerException se)
            {
                m_MainWindow.Print(se.Message);
            }
        }
 public void AssignJob(IJob job, Entity me, JobListener onComplete = null)
 {
     this.me = me;
     job.SetEntity(me);
     job.Init();
     OnComplete = onComplete;
     this.job   = job;
 }
Пример #3
0
        /// <summary>
        /// 添加Job监听
        /// </summary>
        /// <param name="detail"></param>
        private void AddListener(IJobDetail detail)
        {
            var jobListener = new JobListener {
                Name = detail + "_listener"
            };
            IMatcher <JobKey> matcher = KeyMatcher <JobKey> .KeyEquals(detail.Key);

            _scheduler.ListenerManager.AddJobListener(jobListener, matcher);
        }
Пример #4
0
        public async Task Run(ILog log)
        {
            log.Info("------- Initializing ----------------------");

            // First we must get a reference to a scheduler
            ISchedulerFactory sf    = new StdSchedulerFactory();
            IScheduler        sched = sf.GetScheduler();

            log.Info("------- Initialization Complete -----------");

            log.Info("------- Scheduling Jobs -------------------");

            // schedule a job to run immediately
            IJobDetail job = JobBuilder.Create <SimpleJob>()
                             .WithIdentity("job1")
                             .Build();

            ITrigger trigger = TriggerBuilder.Create()
                               .WithIdentity("trigger1")
                               .StartNow()
                               .Build();

            // Set up the listener
            IJobListener      listener = new JobListener();
            IMatcher <JobKey> matcher  = KeyMatcher <JobKey> .KeyEquals(job.Key);

            sched.ListenerManager.AddJobListener(listener, matcher);

            // schedule the job to run
            sched.ScheduleJob(job, trigger);

            // All of the jobs have been added to the scheduler, but none of the jobs
            // will run until the scheduler has been started
            log.Info("------- Starting Scheduler ----------------");
            sched.Start();

            // wait 30 seconds:
            // note:  nothing will run
            log.Info("------- Waiting 30 seconds... --------------");

            // wait 30 seconds to show jobs
            await Task.Delay(TimeSpan.FromSeconds(30));

            // executing...

            // shut down the scheduler
            log.Info("------- Shutting Down ---------------------");
            sched.Shutdown(true);
            log.Info("------- Shutdown Complete -----------------");

            SchedulerMetaData metaData = sched.GetMetaData();

            log.Info($"Executed {metaData.NumberOfJobsExecuted} jobs.");
        }
Пример #5
0
        /// <summary>
        /// 添加一个工作调度(映射程序集指定IJob实现类)
        /// </summary>
        /// <param name="m"></param>
        /// <returns></returns>
        private async Task <BaseQuartzNetResult> AddScheduleJob(ScheduleEntity m)
        {
            var result = new BaseQuartzNetResult();

            try
            {
                //检查任务是否已存在
                var jk = new JobKey(m.JobName, m.JobGroup);
                if (await this.Scheduler.Result.CheckExists(jk))
                {
                    //删除已经存在任务
                    await this.Scheduler.Result.DeleteJob(jk);
                }
                //反射获取任务执行类
                var jobType = FileHelper.GetAbsolutePath(m.AssemblyName, m.AssemblyName + "." + m.ClassName);
                // 定义这个工作,并将其绑定到我们的IJob实现类
                IJobDetail job = new JobDetailImpl(m.JobName, m.JobGroup, jobType);
                //IJobDetail job = JobBuilder.CreateForAsync<T>().WithIdentity(m.JobName, m.JobGroup).Build();
                // 创建触发器
                ITrigger trigger;
                //校验是否正确的执行周期表达式
                if (!string.IsNullOrEmpty(m.Cron) && CronExpression.IsValidExpression(m.Cron))
                {
                    trigger = CreateCronTrigger(m);
                }
                else
                {
                    trigger = CreateSimpleTrigger(m);
                }
                // 设置监听器
                JobListener listener = new JobListener();
                // IMatcher<JobKey> matcher = KeyMatcher<JobKey>.KeyEquals(job.Key);
                this.Scheduler.Result.ListenerManager.AddJobListener(listener, GroupMatcher <JobKey> .AnyGroup());
                // 告诉Quartz使用我们的触发器来安排作业
                await this.Scheduler.Result.ScheduleJob(job, trigger);

                result.Code = 1000;
            }
            catch (Exception ex)
            {
                await Console.Out.WriteLineAsync(string.Format("添加任务出错{0}", ex.Message));

                result.Code = 1001;
                result.Msg  = ex.Message;
            }
            return(result);
        }
        /// <summary>
        /// 添加任务调度(指定IJob实现类)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="m"></param>
        /// <returns></returns>
        private async Task <BaseQuartzNetResult> AddScheduleJob <T>(ScheduleEntity m) where T : IJob
        {
            var result = new BaseQuartzNetResult();

            try
            {
                //检查任务是否已存在
                var jk = new JobKey(m.JobName, m.JobGroup);
                if (await this.Scheduler.Result.CheckExists(jk))
                {
                    //删除已经存在任务
                    await this.Scheduler.Result.DeleteJob(jk);
                }
                // 定义这个工作,并将其绑定到我们的IJob实现类
                IJobDetail job = JobBuilder.CreateForAsync <T>().WithIdentity(m.JobName, m.JobGroup).Build();
                // 创建触发器
                ITrigger trigger;
                //校验是否正确的执行周期表达式
                if (!string.IsNullOrEmpty(m.Cron) && CronExpression.IsValidExpression(m.Cron))
                {
                    trigger = CreateCronTrigger(m);
                }
                else
                {
                    trigger = CreateSimpleTrigger(m);
                }
                // 设置监听器
                JobListener listener = new JobListener();
                // IMatcher<JobKey> matcher = KeyMatcher<JobKey>.KeyEquals(job.Key);
                this.Scheduler.Result.ListenerManager.AddJobListener(listener, GroupMatcher <JobKey> .AnyGroup());
                // 告诉Quartz使用我们的触发器来安排作业
                await this.Scheduler.Result.ScheduleJob(job, trigger);

                result.Code = 1000;
            }
            catch (Exception ex)
            {
                result.Code = 1001;
                result.Msg  = ex.Message;
            }
            return(result);
        }
Пример #7
0
        public QuartzService(JobListener jobListener, SchedulerListener schedulerListener, ILogger <QuartzService> logger)
        {
//            var properties = new NameValueCollection();
//            properties[StdSchedulerFactory.PropertySchedulerInstanceName] = "gogogo";
//            properties[StdSchedulerFactory.PropertySchedulerInstanceId] = "AUTO";
//            properties[StdSchedulerFactory.PropertyJobStoreType] = typeof (MongoDbJobStore).AssemblyQualifiedName;
//// I treat the database in the connection string as the one you want to connect to
//            properties[$"{StdSchedulerFactory.PropertyJobStorePrefix}.{StdSchedulerFactory.PropertyDataSourceConnectionString}"] = "mongodb://localhost/quartz";
//// The prefix is optional
//            properties[$"{StdSchedulerFactory.PropertyJobStorePrefix}.collectionPrefix"] = "prefix";

//            var scheduler = new StdSchedulerFactory(properties);

            var schedulerFactory = new StdSchedulerFactory(QuartzConfig());

            //var schedulerFactory = new StdSchedulerFactory(QuartzConfig());
            _scheduler = schedulerFactory.GetScheduler().Result;
            _scheduler.ListenerManager.AddJobListener(jobListener, GroupMatcher <JobKey> .AnyGroup());
            _scheduler.ListenerManager.AddSchedulerListener(schedulerListener);
            _logger = logger;
        }
 private void InitOneOffJobListener()
 {
     _oneOffJobListener = new JobListener();
     _oneOffJobListener.JobWasExecutedListener += OneOffJobWasExecuted;
     _runScriptService.SetOneOffJobListener(_oneOffJobListener);
 }
 public override void OnReset()
 {
     job        = null;
     OnComplete = null;
     me         = null;
 }