Quartz.NET学习系列(十)--- 触发器执行优先级
2015-03-14 21:05
260 查看
在使用Quartz.NET的时候可能会碰到这样一种情况,多个触发器触发同一个任务时,当多个触发器触发的时间相互冲突时,也就是在同一时间触发同一个任务,这时候就需要有一个触发的优先级了,即由哪个触发器来触发,如果不设置优先级的话,Quartz.NET会按照默认的方式处理。设置优先级的代码如下:
public class TriggerEchoJob : IJob { private ILog log = LogManager.GetLogger(typeof (TriggerEchoJob)); public void Execute(IJobExecutionContext context) { log.Info("触发器: " + context.Trigger.Key); } }
public class PriorityExample { public static void Run() { ILog log = LogManager.GetLogger(typeof (PriorityExample)); NameValueCollection properties = new NameValueCollection(); properties["quartz.scheduler.instanceName"] = "PriorityExampleScheduler"; properties["quartz.threadPool.threadCount"] = "1"; properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz"; properties["quartz.jobStore.type"] = "Quartz.Simpl.RAMJobStore, Quartz"; ISchedulerFactory sf = new StdSchedulerFactory(properties); IScheduler sched = sf.GetScheduler(); IJobDetail job = JobBuilder.Create<TriggerEchoJob>() .WithIdentity("TriggerEchoJob") .Build(); DateTimeOffset startTime = DateBuilder.FutureDate(5, IntervalUnit.Second); ITrigger trigger1 = TriggerBuilder.Create() .WithIdentity("Priority1Trigger5SecondRepeat") .StartAt(startTime) .WithSimpleSchedule(x => x.WithRepeatCount(1).WithIntervalInSeconds(5)) .WithPriority(1) .ForJob(job) .Build(); ITrigger trigger2 = TriggerBuilder.Create() .WithIdentity("Priority5Trigger10SecondRepeat") .StartAt(startTime) .WithSimpleSchedule(x => x.WithRepeatCount(1).WithIntervalInSeconds(10)) .ForJob(job) .Build(); log.Info("默认优先级"+trigger2.Priority.ToString()); ITrigger trigger3 = TriggerBuilder.Create() .WithIdentity("Priority10Trigger15SecondRepeat") .StartAt(startTime) .WithSimpleSchedule(x => x.WithRepeatCount(1).WithIntervalInSeconds(15)) .WithPriority(10) .ForJob(job) .Build(); sched.ScheduleJob(job, trigger1); sched.ScheduleJob(trigger2); sched.ScheduleJob(trigger3); sched.Start(); log.Info("------- 计划开始 -----------------"); log.Info("------- 等待30秒 -------------"); Thread.Sleep(TimeSpan.FromSeconds(300)); sched.Shutdown(true); log.Info("------- 计划关闭 -----------------"); } }如果不设置触发器的优先级,默认的优先级为5
相关文章推荐
- Spring整理系列(09)——spring与quartz整合触发器执行表达式cronExpression详解
- Quartz Trigger Priority 触发器优先级
- Quartz.NET学习系列(四)--- 数据注入
- Quartz.NET 架构与源代码分析系列 part 3 :Trigger 触发器
- Quartz.NET学习系列(六)--- 中断任务
- Spring整理系列(08)——spring与quartz整合执行定时任务
- Quartz.NET学习系列(三)--- Cron触发器
- 【j2ee系列】springmvc中使用quartz,项目启动就执行某些任务
- Quartz.NET学习系列(十一)--- Quartz.NET持久化及客户端服务器模式
- Quartz入门实例3-使用CronTrigger指定触发器执行job
- Quartz.NET学习系列(八)--- 任务监听器
- 关于调用Spring设置Quartz中动态执行时间解决办法
- SQLite中如何用触发器执行取消和重做逻辑(2)
- CLR探索系列:深入追踪托管exe加载执行过程
- ASP中JavaScript和VBScript混用与runat=server时脚本语言的执行优先级
- 《WF编程》系列之40 - 自定义活动:活动的执行
- IBatis系列-执行存储过程
- 数据库的触发器trigger中如何执行socket操作?
- CLR探索系列:深入追踪托管exe加载执行过程
- SQLite中如何用触发器执行取消和重做逻辑(3)