第四节: Quartz.Net五大构件之Trigger通用用法(常用方法、优先级、与job关联等)
一. 简介
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().RepeatForever())
.EndAt(DateTimeOffset.Now.AddSeconds()) //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().RepeatForever()) //每隔两秒执行一次
.EndAt(DateTimeOffset.Now.AddSeconds()) //60s后结束
.ForJob("job1", "jobGroup1") //通过表名和组名进行关联
.Build();
var trigger2 = TriggerBuilder.Create()
.UsingJobData("name", "ypf2") //附加信息
.UsingJobData("age", "age2")
.StartNow() //马上开启
.WithSimpleSchedule(x => x.WithIntervalInSeconds().RepeatForever()) //每隔5秒执行一次
.EndAt(DateTimeOffset.Now.AddSeconds()) //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().RepeatForever()) //每隔两秒执行一次
.EndAt(DateTimeOffset.Now.AddSeconds()) //60s后结束
.Build();
var trigger2 = TriggerBuilder.Create()
.UsingJobData("name", "ypf2") //附加信息
.UsingJobData("age", "age2")
.StartNow() //马上开启
.WithSimpleSchedule(x => x.WithIntervalInSeconds().RepeatForever()) //每隔5秒执行一次
.EndAt(DateTimeOffset.Now.AddSeconds()) //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五大构件之Trigger通用用法(常用方法、优先级、与job关联等)的更多相关文章
- 第九节: 利用RemoteScheduler实现Sheduler的远程控制 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 第六节: 六类Calander处理六种不同的时间场景 第五节: Quartz.Net五大构件之Trigger的四大触发类 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联
第九节: 利用RemoteScheduler实现Sheduler的远程控制 一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上 ...
- 第五节: Quartz.Net五大构件之Trigger的四大触发类
一. WithSimpleSchedule(ISimpleTrigger) 1. 用途:时.分.秒上的轮询(和timer类似),实际开发中,该场景占绝大多数. 2. 轮询的种类:永远轮询和限定次数轮询 ...
- 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联等)
一. 五大构件 引言: Quartz.Net的五大构件 1. 调度器:Scheduler 2. 作业任务:Job 3. 触发器: Trigger 4. 线程池: SimpleThreadPoo ...
- 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案
一. 简介 揭秘: SimpleThreadPool是Quartz.Net中自带的线程池,默认个数为10个,代表一个Scheduler同一时刻并发的最多只能执行10个job,超过10个的job需要排队 ...
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
ASP.NET MVC深入浅出(被替换) 一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...
- android内部培训视频_第四节(1)_异步网络操作
第四节(1):异步网络操作 一.结合asyncTask下载网络图片 1.定义下载类,继承自asyncTask,参数分别为:String(url地址),Integer(刻度,本例没有用到),BitMa ...
- Centos7 install Openstack - (第四节)添加计算服务(Nova)
Centos7 install Openstack - (第四节)添加计算服务(Nova) 我的blog地址:http://www.cnblogs.com/caoguo 该文根据openstack官方 ...
- 第四节,Linux基础命令
第四节,Linux基础命令 命令是系统操作员对系统传入的指令,传入指令后回车,系统接收到指令做出相应的行为 1.查看用户位于系统什么位置 [pmd]检查操作用户位于系统的什么位置 命令 ...
- VUE2.0实现购物车和地址选配功能学习第四节
第四节 v-on实现金额动态计算 用¥金额 进行格式处理,可以使用原生js进行转换,但是在vuei,使用filter过滤器更加方便 注: 1.es6语法=>和import等 好处在于res参数后 ...
随机推荐
- 干货:Vue粒子特效(vue-particles插件)
转:https://www.jianshu.com/p/53199b842d25 image.png 图上那些类似于星座图的点和线,是由vue-particles生成的,不仅自己动,而且能与用户鼠标事 ...
- 【入门】Spring-Boot项目配置Mysql数据库
前言 前面参照SpringBoot官网,自动生成了简单项目点击打开链接 配置数据库和代码遇到的问题 问题1:cannot load driver class :com.mysql.jdbc.Drive ...
- w3m 使用总结
安装 sudo apt install w3m终端 w3m www.baidu.com 即可打开w3m是个开放源代码的命令行下面的网页浏览器.一般的linux系统都会自带这个工具,可以通过它在命令行下 ...
- 监控elssticSearch健康状态
[4ajr@elk1 scripts]$ curl 172.30.210.175:9200/_cat/health [4ajr@elk1 scripts]$ cat check_es_healthy. ...
- 从PyMongo看MongoDB Read Preference
在CAP理论与MongoDB一致性.可用性的一些思考一文中提到,MongoDB提供了一些选项,如Read Preference.Read Concern.Write Concern,对MongoD ...
- PyInstaller安装使用方法
PyInstaller可以把Python应用程序及其所有依赖项捆绑到一个包中.用户可以在不安装Python解释器或任何模块的情况下运行打包的应用程序.PyInstaller支持Python 2.7和P ...
- HTML/CSS 速写神器 Emmet语法
Emmet 是高效.快速编写 HTML 和 CSS 代码的一种插件,如果还不了解,请戳Emmet — the essential toolkit for web-developers,再根据你使用的编 ...
- H5网页后在返回到微信公众平台自定义菜单
<p class="success">订阅成功!</p> <div class="btn" @click="finish ...
- c++入门之函数指针和函数对象
函数指针可以方便我们调用函数,但采用函数对象,更能体现c++面向对象的程序特性.函数对象的本质:()运算符的重载.我们通过一段代码来感受函数指针和函数对象的使用: int AddFunc(int a, ...
- react-navigation 简介
StackNavigator: 原理和浏览器相似但又有局限,浏览器的方式是开放性的,通过点击一个链接可以跳转到任何页面(push),点击浏览器后退按钮,返回到前一个页面(pop).StackNavig ...