第四节: 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参数后 ...
随机推荐
- LeetCode算法题-Island Perimeter(Java实现)
这是悦乐书的第238次更新,第251篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第105题(顺位题号是463).您将获得一个二维整数网格形式的地图,其中1代表土地,0代 ...
- 返回数组中指定的一列,将键值作为元素键名array_column
array_column() 函数 从记录集中取出 last_name 列: <?php // 表示由数据库返回的可能记录集的数组 $a = array( array( 'id' => 5 ...
- python实现数据结构单链表
#python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" ...
- mysql 报错ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executin
解决办法1. 修改用户密码mysql> alter user 'root'@'localhost' identified by 'youpassword'; 或者 mysql> set p ...
- uWSGI、WSGI和uwsgi
WSGI wsgi server (比如uWSGI) 要和 wsgi application(比如django )交互,uwsgi需要将过来的请求转给django 处理,那么uWSGI 和 djang ...
- 2018-2019-2 20175228实验一《Java开发环境的熟悉》实验报告
一.实验内容及步骤 (一)使用JDk编译.运行简单的Java程序 实验步骤如下: 实验截图如下: (二)使用IDEA调试程序 1.设置断点2.单步运行:Step Into(快捷捷F7)和Step Ov ...
- AI 生成式对抗网络(GAN)
生成式对抗网络(Generative Adversarial Network,简称GAN),主要由两部分构成:生成模型G和判别模型D.训练GAN就是两种模型的对抗过程. 生成模型:利用任意噪音(ran ...
- warn_alloc():page allocation failure问题分析
关键词:warn_alloc().__GFP_XXX.order.CMA等等. 在内存申请的时候经常会遇到类似“ xxx: page allocation failure: order:10...”类 ...
- 广师大学习笔记之文本统计(jieba库好玩的词云)
1.jieba库,介绍如下: (1) jieba 库的分词原理是利用一个中文词库,将待分词的内容与分词词库进行比对,通过图结构和动态规划方法找到最大概率的词组:除此之外,jieba 库还提供了增加自定 ...
- Open Source
资源来源于http://www.cnblogs.com/Leo_wl/category/246424.html RabbitMQ 安装与使用 摘要: RabbitMQ 安装与使用 前言 吃多了拉就是队 ...