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; }
/// <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); }
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."); }
/// <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); }
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; }