第四节: Quartz.Net五大构件之Trigger通用用法(常用方法、优先级、与job关联等)
2018-03-09 13:08
671 查看
一. 简介
1. 几个类型:
①:TriggerBuilder:用来创建ITrigger实例
②:ITrigger:触发器实例
2.常用的几个方法
①.StartNow:Trigger马上触发.
②.StartAt和EndAt:设置Trigger触发的开始时间和结束时间 (省略设置开始时间的话,默认从当前时间开始执行)
③.UsingJobData:给Trigger添加一些附加值(通过context.Trigger.JobDataMap获取)
④.WithDescription:用来描述该触发器,并没有什么实际左右
⑤.WithPriority:设置Trigger的优先级,默认为5,数字越大,优先级越高.(该优先级用于一个job对应多个Trigger,且Trigger的触发时间相同,优先级越大的越先执行)
⑥.ForJob:将job和trigger进行关联,该方法有多个重载,关联后ScheduleJob方法进行调度时,只需将trigger传入进去即可
二. Job和Trigger关联问题
(1). 1个job对应1个trigger:调用ScheduleJob(IJobDetail jobDetail, ITrigger trigger),直接关联即可,无须做特别处理
(2). 1个job对应多个trigger:有两种方案解决
方案A: 将job持久化(StoreDurably(true)),然后通过AddJob方法加入调度池中,Trigger上通过ForJob方法和指定job进行关联,然后调用ScheduleJob(ITrigger trigger)方法,将trigger全部加入调度池中,最后Start开启即可
方案B: 创建job和trigger都不需要关联,也不需要特殊设置,最后将trigger加入一个HashSet<ITrigger>池中,通过一次性通过 ScheduleJob(IJobDetail jobDetail, Collection.ISet<ITrigger> triggersForJob, bool replace)进行关联
(3). 2个job对应1个trigger (不常用)
利用JobChainingJobListener实现
代码分享:
三. Trigger的优先级(未完)
利用WithPriority方法,该优先级用于一个job对应多个Trigger,且Trigger的触发时间相同,优先级越大的越先执行。
1. 几个类型:
①:TriggerBuilder:用来创建ITrigger实例
②:ITrigger:触发器实例
2.常用的几个方法
①.StartNow:Trigger马上触发.
②.StartAt和EndAt:设置Trigger触发的开始时间和结束时间 (省略设置开始时间的话,默认从当前时间开始执行)
③.UsingJobData:给Trigger添加一些附加值(通过context.Trigger.JobDataMap获取)
④.WithDescription:用来描述该触发器,并没有什么实际左右
⑤.WithPriority:设置Trigger的优先级,默认为5,数字越大,优先级越高.(该优先级用于一个job对应多个Trigger,且Trigger的触发时间相同,优先级越大的越先执行)
⑥.ForJob:将job和trigger进行关联,该方法有多个重载,关联后ScheduleJob方法进行调度时,只需将trigger传入进去即可
二. Job和Trigger关联问题
(1). 1个job对应1个trigger:调用ScheduleJob(IJobDetail jobDetail, ITrigger trigger),直接关联即可,无须做特别处理
(2). 1个job对应多个trigger:有两种方案解决
方案A: 将job持久化(StoreDurably(true)),然后通过AddJob方法加入调度池中,Trigger上通过ForJob方法和指定job进行关联,然后调用ScheduleJob(ITrigger trigger)方法,将trigger全部加入调度池中,最后Start开启即可
方案B: 创建job和trigger都不需要关联,也不需要特殊设置,最后将trigger加入一个HashSet<ITrigger>池中,通过一次性通过 ScheduleJob(IJobDetail jobDetail, Collection.ISet<ITrigger> triggersForJob, bool replace)进行关联
(3). 2个job对应1个trigger (不常用)
利用JobChainingJobListener实现
代码分享:
//1. 创建Schedule IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); //2. 创建Job var job1 = JobBuilder.Create<HelloJob3>() .WithIdentity("job1", "jobGroup1") .StoreDurably(true) .Build(); var job2 = JobBuilder.Create<HelloJob>() .WithIdentity("job2", "jobGroup2") .StoreDurably(true) .Build(); /********************************* 下面测试job和 Trigger的关联问题 (与下面Trigger优先级的测试互不影响)**************************************/ #region 情况1:1个job对应1个trigger { var trigger = TriggerBuilder.Create() .UsingJobData("name", "ypf1") //附加信息 .UsingJobData("age", "age1") .StartAt(DateBuilder.EvenSecondDateAfterNow()) //表示下一个秒整点开启,比如现在9点19分20秒,那么9点20分21s整开启 .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever()) .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后结束 .Build(); scheduler.ScheduleJob(job1, trigger); scheduler.Start(); } #endregion #region 情况2:1个job对应多个Trigger //方案1 { var trigger1 = TriggerBuilder.Create() .UsingJobData("name", "ypf1") //附加信息 .UsingJobData("age", "age1") .StartNow() //马上开启 .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever()) //每隔两秒执行一次 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后结束 .ForJob("job1", "jobGroup1") //通过表名和组名进行关联 .Build(); var trigger2 = TriggerBuilder.Create() .UsingJobData("name", "ypf2") //附加信息 .UsingJobData("age", "age2") .StartNow() //马上开启 .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()) //每隔5秒执行一次 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后结束 .ForJob(job1) //直接IJobDetail关联 .Build(); scheduler.AddJob(job1, true); scheduler.ScheduleJob(trigger1); scheduler.ScheduleJob(trigger2); scheduler.Start(); } //方案2 { var trigger1 = TriggerBuilder.Create() .UsingJobData("name", "ypf1") //附加信息 .UsingJobData("age", "age1") .StartNow() //马上开启 .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever()) //每隔两秒执行一次 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后结束 .Build(); var trigger2 = TriggerBuilder.Create() .UsingJobData("name", "ypf2") //附加信息 .UsingJobData("age", "age2") .StartNow() //马上开启 .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()) //每隔5秒执行一次 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后结束 .Build(); Quartz.Collection.HashSet<ITrigger> triggerHash = new Quartz.Collection.HashSet<ITrigger>(); triggerHash.Add(trigger1); triggerHash.Add(trigger2); scheduler.ScheduleJob(job1, triggerHash, true); scheduler.Start(); } #endregion #region 情况3:2个job对应1个trigger { //每s执行一次 var trigger = TriggerBuilder.Create().WithCronSchedule("/1 * * * * ?").Build(); JobChainingJobListener listener = new JobChainingJobListener("mytest"); listener.AddJobChainLink(job1.Key, job2.Key); scheduler.ListenerManager.AddJobListener(listener); scheduler.AddJob(job2, true); scheduler.ScheduleJob(job1, trigger); scheduler.Start(); } #endregion
三. Trigger的优先级(未完)
利用WithPriority方法,该优先级用于一个job对应多个Trigger,且Trigger的触发时间相同,优先级越大的越先执行。
相关文章推荐
- 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联等)
- 第五节: Quartz.Net五大构件之Trigger的四大触发类
- Quartz.NET笔记(七) TriggerListeners and JobListeners
- ASP.NET的常用方法,用法。
- C# ASP.NET 最常用的通用权限的3个方法例子展示(每个功能一行代码实现)
- C# ASP.NET 最常用的通用权限的3个方法例子展示(每个功能一行代码实现)
- C# ASP.NET 最常用的通用权限的3个方法例子展示(每个功能一行代码实现)
- C# ASP.NET 最常用的通用权限的3个方法例子展示(每个功能一行代码实现)
- C# ASP.NET 最常用的通用权限的3个方法例子展示(每个功能一行代码实现)
- 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案
- Quartz.NET教程_Lesson 7: TriggerListeners and JobListeners
- C# ASP.NET 最常用的通用权限的3个方法例子展示(每个功能一行代码实现)
- c#.net常用函数和方法集
- ASP.NET中常用的数据有效性校验的方法 (转)
- c#.net常用的小函数和方法集
- c#.net常用的小函数和方法集
- [导入]ASP.NET中的一些常用方法
- c#.net常用的小函数和方法集
- C#.Net 常用函数和方法集
- 汇总c#.net常用函数和方法集