一. 简介

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. Java11新特性!

    Java11又出新版本了,我还在Java8上停着.不过这也挡不住我对他的热爱,忍不住查看了一下他的新性能,由于自己知识有限,只总结了以下八个特性: 1.本地变量类型推断 什么是局部变量类型推断? va ...

  2. idea spring-boot总结

    1. 按自己重新配置spring-boot pom点进 mybatis-spring-boot-starter ,在要改的里面 <version>3.4.4</version> ...

  3. SQL解析在美团的应用

    https://tech.meituan.com/SQL_parser_used_in_mtdp.html 数据库作为核心的基础组件,是需要重点保护的对象.任何一个线上的不慎操作,都有可能给数据库带来 ...

  4. WPFの命中测试

    概述:  WPF中的Canvas是常用的一个绘图控件,可以方便地在Canvas中添加我们需要处理的各种元素如:图片.文字等.但Canvas中元素增加到一定数量,并且有重合的时候,我们如何通过在Canv ...

  5. Java base64转图片

    import sun.misc.BASE64Decoder; import java.io.FileOutputStream; import java.io.OutputStream; public ...

  6. Linux+Shell常用命令总结

    因为自己不经常使用linux的命令行工具,但是mac的终端还是经常使用的,有些命令总是要想一会或者百度一下才知道怎么用,抽时间整理了一下常用的命令,作为笔记. 常用命令 查看文件操作: ls :列出当 ...

  7. Spring的事件机制详解

    同步事件和异步事件 同步事件:在一个线程里,按顺序执行业务,做完一件事再去做下一件事. 异步事件:在一个线程里,做一个事的同事,可以另起一个新的线程执行另一件事,这样两件事可以同时执行. 用一个例子来 ...

  8. 软工+C(7): 野生程序员

    // 上一篇:最近发展区/脚手架 // 下一篇:提问和回复 怎样做足够好的软件?我们就差一个程序员! 没有什么软件工程的理论的时候,程序员们凭借自己对编程的热爱,凭借着:"这是一个可以自动化 ...

  9. Kubernetes(基础 一):进程

    容器其实是一种沙盒技术.顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术.这样,应用与应用之间,就因为有了边界而不至于相互干扰:而被装进集装箱的应用,也可以被方便地搬来搬去,这不就是 ...

  10. Flask 快速使用 进阶—— (2)

    案例:可配置发送信息的系统 假如我们有这样的一个系统,可以发送短息,邮件和微信,后期可能还会增加一些平台,怎么才可以做到快速切换的去使用某种功能呢,在这里我会通过在配置文件中简单的配置就可以实现 在项 ...