博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第四节: Quartz.Net五大构件之Trigger通用用法(常用方法、优先级、与job关联等)
阅读量:6362 次
发布时间:2019-06-23

本文共 5977 字,大约阅读时间需要 19 分钟。

一. 简介

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             //1. 创建Schedule 2             IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); 3             //2. 创建Job 4             var job1 = JobBuilder.Create
() 5 .WithIdentity("job1", "jobGroup1") 6 .StoreDurably(true) 7 .Build(); 8 var job2 = JobBuilder.Create
() 9 .WithIdentity("job2", "jobGroup2")10 .StoreDurably(true)11 .Build();12 /********************************* 下面测试job和 Trigger的关联问题 (与下面Trigger优先级的测试互不影响)**************************************/13 14 #region 情况1:1个job对应1个trigger15 {16 var trigger = TriggerBuilder.Create()17 .UsingJobData("name", "ypf1") //附加信息18 .UsingJobData("age", "age1")19 .StartAt(DateBuilder.EvenSecondDateAfterNow()) //表示下一个秒整点开启,比如现在9点19分20秒,那么9点20分21s整开启 20 .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever())21 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后结束22 .Build();23 scheduler.ScheduleJob(job1, trigger);24 scheduler.Start();25 }26 #endregion27 28 #region 情况2:1个job对应多个Trigger29 //方案130 {31 var trigger1 = TriggerBuilder.Create()32 .UsingJobData("name", "ypf1") //附加信息33 .UsingJobData("age", "age1")34 .StartNow() //马上开启35 .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever()) //每隔两秒执行一次36 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后结束37 .ForJob("job1", "jobGroup1") //通过表名和组名进行关联38 .Build();39 var trigger2 = TriggerBuilder.Create()40 .UsingJobData("name", "ypf2") //附加信息41 .UsingJobData("age", "age2")42 .StartNow() //马上开启43 .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()) //每隔5秒执行一次44 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后结束45 .ForJob(job1) //直接IJobDetail关联46 .Build();47 48 scheduler.AddJob(job1, true);49 scheduler.ScheduleJob(trigger1);50 scheduler.ScheduleJob(trigger2);51 scheduler.Start();52 }53 //方案254 {55 var trigger1 = TriggerBuilder.Create()56 .UsingJobData("name", "ypf1") //附加信息57 .UsingJobData("age", "age1")58 .StartNow() //马上开启59 .WithSimpleSchedule(x => x.WithIntervalInSeconds(2).RepeatForever()) //每隔两秒执行一次60 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后结束61 .Build();62 var trigger2 = TriggerBuilder.Create()63 .UsingJobData("name", "ypf2") //附加信息64 .UsingJobData("age", "age2")65 .StartNow() //马上开启66 .WithSimpleSchedule(x => x.WithIntervalInSeconds(5).RepeatForever()) //每隔5秒执行一次67 .EndAt(DateTimeOffset.Now.AddSeconds(60)) //60s后结束68 .Build();69 70 Quartz.Collection.HashSet
triggerHash = new Quartz.Collection.HashSet
();71 triggerHash.Add(trigger1);72 triggerHash.Add(trigger2);73 scheduler.ScheduleJob(job1, triggerHash, true);74 scheduler.Start();75 }76 #endregion77 78 #region 情况3:2个job对应1个trigger 79 {80 //每s执行一次81 var trigger = TriggerBuilder.Create().WithCronSchedule("/1 * * * * ?").Build();82 83 JobChainingJobListener listener = new JobChainingJobListener("mytest");84 listener.AddJobChainLink(job1.Key, job2.Key);85 scheduler.ListenerManager.AddJobListener(listener);86 87 scheduler.AddJob(job2, true);88 scheduler.ScheduleJob(job1, trigger);89 scheduler.Start();90 }91 #endregion

 

三. Trigger的优先级(未完)

   利用WithPriority方法,该优先级用于一个job对应多个Trigger,且Trigger的触发时间相同,优先级越大的越先执行。

 

 

 

 

转载于:https://www.cnblogs.com/yaopengfei/p/8533333.html

你可能感兴趣的文章
Charles打开无法访问网络
查看>>
2018.08.13
查看>>
WebSphere--基本特性
查看>>
PHP Jquery
查看>>
商品加入购物车表结构设计
查看>>
hibernate hibernate.cfg.xml
查看>>
Windows下Python3.6安装第三方模块
查看>>
v9定时发布的简单实现方法[支持静态生成]
查看>>
span中内容随着数字长度的添加而增大
查看>>
Collection接口框架图
查看>>
Basic Concepts of Block Media Recovery
查看>>
字符串数组 输入3个字符串,要求按由小到大的字母顺序输出; 输入n个学生的姓名和学号到字符串数组中,在输入一个姓名,如果班级有该生则返回其信息,否则返回本班无此人...
查看>>
linux中安装JDK linux中安装Tomcat linux中安装Mysql 及故障解析 linux系统安装redis
查看>>
LeetCode-最后一个单词的长度
查看>>
iOS UI 07 uitableview
查看>>
快速排序
查看>>
const与#define、结构体对齐、函数重载name mangling、new/delete 等
查看>>
BZOJ2054 疯狂的馒头
查看>>
关于echarts的那些事(地图标点,折线图,饼图)
查看>>
d3.js学习笔记
查看>>