一. 简介

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关联等)的更多相关文章

  1. 第九节: 利用RemoteScheduler实现Sheduler的远程控制 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案 第六节: 六类Calander处理六种不同的时间场景 第五节: Quartz.Net五大构件之Trigger的四大触发类 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联

    第九节: 利用RemoteScheduler实现Sheduler的远程控制   一. RemoteScheduler远程控制 1. 背景: 在A服务器上部署了一个Scheduler,我们想在B服务器上 ...

  2. 第五节: Quartz.Net五大构件之Trigger的四大触发类

    一. WithSimpleSchedule(ISimpleTrigger) 1. 用途:时.分.秒上的轮询(和timer类似),实际开发中,该场景占绝大多数. 2. 轮询的种类:永远轮询和限定次数轮询 ...

  3. 第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联等)

    一. 五大构件 引言: Quartz.Net的五大构件 1.  调度器:Scheduler 2.  作业任务:Job 3.  触发器: Trigger 4.  线程池: SimpleThreadPoo ...

  4. 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案

    一. 简介 揭秘: SimpleThreadPool是Quartz.Net中自带的线程池,默认个数为10个,代表一个Scheduler同一时刻并发的最多只能执行10个job,超过10个的job需要排队 ...

  5. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

  6. android内部培训视频_第四节(1)_异步网络操作

    第四节(1):异步网络操作  一.结合asyncTask下载网络图片 1.定义下载类,继承自asyncTask,参数分别为:String(url地址),Integer(刻度,本例没有用到),BitMa ...

  7. Centos7 install Openstack - (第四节)添加计算服务(Nova)

    Centos7 install Openstack - (第四节)添加计算服务(Nova) 我的blog地址:http://www.cnblogs.com/caoguo 该文根据openstack官方 ...

  8. 第四节,Linux基础命令

    第四节,Linux基础命令 命令是系统操作员对系统传入的指令,传入指令后回车,系统接收到指令做出相应的行为 1.查看用户位于系统什么位置 [pmd]检查操作用户位于系统的什么位置 命令         ...

  9. VUE2.0实现购物车和地址选配功能学习第四节

    第四节 v-on实现金额动态计算 用¥金额 进行格式处理,可以使用原生js进行转换,但是在vuei,使用filter过滤器更加方便 注: 1.es6语法=>和import等 好处在于res参数后 ...

随机推荐

  1. 在Visual Studio 2017上配置Glut

    在Visual Studio 2017上配置Glut 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在Visual Studio 2017上配置并使用 ...

  2. jvisualvm 连接 jstatd 远程监控 jvm 或 Visual GC提示"不受此JVM支持“

    Visual GC提示"不受此JVM支持",可以使用此方法解决. 一.添加配置文件 jstatd.all.policy [root@localhost /]# cd /usr/lo ...

  3. hadoop dfs.datanode.du.reserved 预留空间配置方法

    对于datanode配置预留空间的方法 为:在hdfs-site.xml添加如下配置 <property> <name>dfs.datanode.du.reserved< ...

  4. 微信小程序支付,带java源码

    先说下这个的背景吧... 本人是做java后端的,自认为还有很大的发展空间(嘻嘻,你懂的),看过一段时间的小程序可是没有支付成功...最近公司要做小程序项目,老大让我看下小程序,折腾了好几天,参照着h ...

  5. pip 升级 pip

    For Python2 sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ --upgrade pip For Python3 ...

  6. Python#常用的模块和简单用法

    目录 random 随机模块 os 文件夹模块: time 时间模块: matplotlab.pyplot 作图模块 mpl_toolkits.mplot3d 绘制3D图模块 Pygame Reque ...

  7. [Oracle]Sqlplus 中使用 new_value

    通过再sqlplus 中使用 new_value,可以把从表中查询出来的值,放置到 变量中.然后使用变量时,类似与宏定义一样,就可以像使用表中字段一样方便. 这使得sqlplus 的脚本具备和pl/s ...

  8. ssh远程 和 上传/下载工具

    常用的ssh远程工具有: putty  : 软件体积小,开源免费. xshell  : 功能强大,亦有免费试用版本 SecureCRT  : 功能强大 ftp  : 该软件用于上传下载文件 通过ssh ...

  9. Airflow Python工作流引擎的重要概念介绍

    Airflow Python工作流引擎的重要概念介绍 - watermelonbig的专栏 - CSDN博客https://blog.csdn.net/watermelonbig/article/de ...

  10. jmeter学习记录--07--jmeter元件

    通过jmeter元件可以模拟负载.参数化.设置关联.设置检查点.设置集合点.控制场景运行.监控测试结果等. 1.逻辑控制器:比如foreach控制器,查询到了订单并要对每个订单进行出库操作,以订单号作 ...