博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz.net官方开发指南 第四课:关于Triggers更多内容
阅读量:6433 次
发布时间:2019-06-23

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

Job 一样,
trigger 非常容易使用,但它有一些可选项需要注意和理解,同时,
trigger 有不同的类型,要按照需求进行选择。
Calendars
——
日历
Quartz Calendar 对象在
trigger 被存储到
scheduler 时与
trigger 相关联。
Calendar 对于在
trigger 触发日程中的采用批量世间非常有用。例如:你想要创建一个在每个工作日上午
9
30 触发一个触发器,那么就添加一个排除所有节假日的日历。
Calendar 可以是任何实现
Calendar 接口的序列化对象。看起来如下; 
None.gif
using
 System;
None.gif
None.gif
using
 Quartz.Impl.Calendar; 
None.gif
None.gif
namespace
 Quartz
None.gif
ExpandedBlockStart.gif
{
InBlock.gif
ExpandedSubBlockStart.gif     
/// <summary> 
InBlock.gif
InBlock.gif     
///  An interface to be implemented by objects that define spaces of time during 
InBlock.gif
InBlock.gif    
/// which an associated <see cref="Trigger" /> may fire. 
InBlock.gif
InBlock.gif    
/// </summary>
InBlock.gif
InBlock.gif    
/// <remarks>
InBlock.gif
InBlock.gif    
/// Calendars do not  define actual fire times, but rather are used to limit a 
InBlock.gif
InBlock.gif    
/// <see cref="Trigger" />  from firing on its normal schedule if necessary. Most 
InBlock.gif
InBlock.gif    
/// Calendars include all  times by default and allow the user to specify times to
InBlock.gif
InBlock.gif    
/// exclude. As such, it  is often useful to think of Calendars as being used to
InBlock.gif
InBlock.gif    
/// <i>exclude</i> a block of time, as opposed to <i>include</i> 
InBlock.gif
InBlock.gif    
/// a block of time. (i.e. the  schedule &quot;fire every five minutes except on Sundays&quot; could be 
InBlock.gif
InBlock.gif    
/// implemented with a <see cref="SimpleTrigger" /> and a <see cref="WeeklyCalendar" /> which excludes Sundays)
InBlock.gif
InBlock.gif    
/// </remarks>
InBlock.gif
InBlock.gif     
/// <author>James House</author>
InBlock.gif
ExpandedSubBlockEnd.gif     
/// <author>Juergen Donnerstag</author>
InBlock.gif
InBlock.gif     
public interface ICalendar
InBlock.gif
ExpandedSubBlockStart.gif     
{
InBlock.gif
ExpandedSubBlockStart.gif         
/// <summary> 
InBlock.gif
InBlock.gif         
/// Gets or sets a description for the <see cref="ICalendar" /> instance - may be
InBlock.gif
InBlock.gif         
/// useful for remembering/displaying the purpose of the calendar, though
InBlock.gif
InBlock.gif         
/// the description has no meaning to Quartz.
InBlock.gif
ExpandedSubBlockEnd.gif         
/// </summary>
InBlock.gif
ExpandedSubBlockStart.gif         
string Description getset; }
InBlock.gif
InBlock.gif 
InBlock.gif
ExpandedSubBlockStart.gif         
/// <summary>
InBlock.gif
InBlock.gif         
/// Set a new base calendar or remove the existing one.
InBlock.gif
InBlock.gif         
/// Get the base calendar.
InBlock.gif
ExpandedSubBlockEnd.gif         
/// </summary>
InBlock.gif
ExpandedSubBlockStart.gif         ICalendar CalendarBase 
setget; }
InBlock.gif
InBlock.gif 
InBlock.gif
ExpandedSubBlockStart.gif          
/// <summary>
InBlock.gif
InBlock.gif         
/// Determine whether the given time  is 'included' by the
InBlock.gif
InBlock.gif         
/// Calendar.
InBlock.gif
ExpandedSubBlockEnd.gif         
/// </summary>
InBlock.gif
InBlock.gif         
bool IsTimeIncluded(DateTime time);
InBlock.gif
InBlock.gif 
InBlock.gif
ExpandedSubBlockStart.gif         
/// <summary>
InBlock.gif
InBlock.gif         
/// Determine the next time that is 'included' by the
InBlock.gif
InBlock.gif         
/// Calendar after the given time.
InBlock.gif
ExpandedSubBlockEnd.gif         
/// </summary>
InBlock.gif
InBlock.gif         DateTime GetNextIncludedTime(DateTime time);
InBlock.gif
ExpandedSubBlockEnd.gif     }
InBlock.gif
ExpandedBlockEnd.gif}
None.gif
None.gif
  注意,这些方法的参数都是DateTime型,你可以猜想出,它们的时间戳是毫秒的格式。这意味日历能够排除毫秒精度的时间。最可能的是,你可能对排除整天的时间感兴趣。为了提供方便,Quartz提供了一个Quartz.Impl.Calendar.HolidayCalendar,这个类可以排除整天的时间。
Calenda rs必须被实例化,然后通过AddCalendar (..)方法注册到scheduler中。如果使用
HolidayCalendar ,在实例化之后,你可以使用它的AddExcludedDate (DateTime excludedDate))方法来定义你想要从日程表中排除的时间。同一个
calendar 实例可以被用于多个
trigger 中,如下:
Using Calendars
None.gif
ICalendar cronCalendar 
=
 
new
 CronCalendar(
"
0/5 * * * * ?
"
);
None.gif
None.gifICalendar holidayCalendar 
=
 
new
 HolidayCalendar();       
None.gif
None.gifsched.AddCalendar(
"
cronCalendar
"
, cronCalendar, 
true
true
);
None.gif
None.gifsched.AddCalendar(
"
holidayCalendar
"
, holidayCalendar, 
true
true
);
None.gif
None.gifJobDetail job 
=
 
new
 JobDetail(
"
job_
"
 
+
 count, schedId, 
typeof
 (SimpleRecoveryJob));
None.gif
None.gifSimpleTrigger trigger 
=
 
new
 SimpleTrigger(
"
trig_
"
 
+
 count, schedId, 
20
5000L
);
None.gif
None.giftrigger.AddTriggerListener(
new
 DummyTriggerListener().Name);
None.gif
None.giftrigger.StartTime 
=
 DateTime.Now.AddMilliseconds(
1000L
);
None.gif
None.gifsched.ScheduleJob(job, trigger);
None.gif
None.gif
传入
SimpleTrigger 构造函数的参数的细节将在下章中介绍。但是,任何在日历中被排除的时间所要进行的触发都被取消。
Misfire Instructions
——
未触发指令
Trigger 的另一个重要属性就是它的
misfire instruction( 未触发指令
)
。如果因为
scheduler 被关闭而导致持久的触发器
错过
了触发时间,这时,未触发就发生了。不同类型的触发器有不同的未触发指令。缺省情况下,他们会使用一个
智能策略
指令
—— 根据触发器类型和配置的不同产生不同动作。当
scheduler 开始时,它查找所有未触发的持久
triggers ,然后按照每个触发器所配置的未触发指令来更新它们。开始工程中使用
Quartz 的时,应熟悉定义在各个类型触发器上的未触发指令。关于未触发指令信息的详细说明将在每种特定的类型触发器的指南课程中给出。可以通过MisfireInstruction属性来为给定的触发器实例配置未触发指令。
TriggerUtils - Triggers Made Easy
TriggerUtils
——
使
Triggers
变得容易)
TriggerUtils 类包含了创建触发器以及日期的便捷方法。使用这个类可以轻松地使触发器在每分钟,小时,日,星期,月等触发。使用这个类也可以产生距离触发最近的妙、分或者小时,这对设定触发开始时间非常有用。
TriggerListeners
最后,如同
job 一样,
triggers 可以注册监听器,实现
TriggerListener 接口的对象将可以收到触发器被触发的通知。
本文转自 张善友 51CTO博客,原文链接:http://blog.51cto.com/shanyou/74127,如需转载请自行联系原作者
你可能感兴趣的文章
直播 3.0 时代,在线教育行业的裂变和重构
查看>>
SpringBoot使用Nacos服务发现
查看>>
2017双11技术揭秘—阿里巴巴数据库技术架构演进
查看>>
我的友情链接
查看>>
Spring框架 - AOP使用
查看>>
Ansible常用内置属性
查看>>
C#使用正则表达式校验邮箱
查看>>
Linux自动清理N天前目录文件
查看>>
方便 快捷 安全的EVO邮件服务器
查看>>
bash的快捷键
查看>>
关于如何编写linux设备驱动
查看>>
DNS服务
查看>>
九州云开放“边缘云”能力 助力中国联通延展业务边界
查看>>
Linux进程状态(ps stat)之R、S、D、T、Z、X
查看>>
ME3750和普通3750的区别
查看>>
H3C交换系列之Super VLAN
查看>>
项目采购管理
查看>>
linux系统使用tomcat服务器部署web项目
查看>>
虚拟文件系统相关结构描述【续】
查看>>
我的友情链接
查看>>