[译]Java定时任务调度-Quartz文档(四)More About Triggers
来源:互联网 发布:前瞻网数据 编辑:程序博客网 时间:2024/06/05 04:42
和job一样,trigger用起来也很方便,但在使用Quartz之前,需要了解它的一些可配置的地方,同时根据不同的调度需求选择不同的trigger。
Lesson 5和Lesson 6会进一步学习Simple Trigger和Cron Trigger。
Common Trigger Attributes
除了所有的trigger都需要一个TriggerKey来作为唯一标示之外,所有的trigger类型还有一些共通的地方。这些地方都是在定义trigger时通过TriggerBuilder来定义的。
下面介绍下这些通用属性:
- jobkey属性指定了在触发器启动时该执行哪个任务;
- startTime指定第一次启动触发器的时间。它的值是java.util.Date类型,指定一个具体日期的具体时间。对于某些trigger类型,会在指定的开始时间启动,对于另一些,会结合scheduler来确定何时启动。比如scheduler的调度时间是二月的每个周五,而job的startTime属性这是的是三月一号,那么触发器启动要等快一年了。
- endTime属性指定从何时起不再调度。换句话说,如果scheduler的调度时间是每个月的第五天,而endTime是七月一号,那么最后一次调度时间为六月五号;
剩下的属性将在下节讨论。
Priority
有时候,配置了很多触发器,在同一时间没有那么多的进程或者资源同时触发所有触发器,那么就需要确定哪个trigger优先执行。为此,就需要对trigger指定优先级。如果同一时间指定了N个触发器,但只有Z个执行进程,那么前Z个触发器将会被先启动。优先级可以是任意整数类型,正数和负数都可以。如果没有指定,将会使用默认值5。
注:1、优先级比较是基于同时触发的情况下的,换句话说,先触发的trigger肯定会比后出发的trigger先执行,那么时间只差了1秒。
2、如果触发器是恢复某个中断的job,那么此次执行和之前的trigger具有相同的优先级。
Misfire Instructions
Trigger的另一个重要属性是“misfire instruction”。“misses”(错过)指的是trigger错过了正常的启动时间,一般是由于scheduler关闭或者同时触发的trigger太多导致(上节提到过,优先级不够会不执行)。不同的trigger类型有不同的“misfire instruction”。默认使用’smart policy’策略,该策略基于不同的trigger类型和配置会有不同的行为。当调度器启动时,会查找所有错过的持久化的trigger,然后会根据他们的“misfired instruction”配置信息更新它们。在项目中使用Quartz,应该熟悉这些不同类型trigger的“misfired instruction”,关于“misfired instruction”更多的细节将在后续课程提到每种trigger类型是讲解。
Calendars
在trigger被定义并关联到scheduler时,可以关联Quartz Calendar对象(不是java.util.Calendar对象)。Calendars主要用来针对trigger的调度时间排除掉某段时间。例如你可以定义一个trigger,在每个工作日的9:30,同时添加一个Calendars,排除掉节假日。
Calendars可以是实现了Calendars接口的可序列化对象,像下面这样:
The Calendar Interface
package org.quartz;public interface Calendar { public boolean isTimeIncluded(long timeStamp); public long getNextIncludedTime(long timeStamp);}
注意这些方法的参数都是long类型。如你所想,它们都是以毫秒为单位的时间戳。这意味着Calendars的限定范围是精确到毫秒的。如果你想排除一整天,Quart中的org.quartz.impl.HolidayCalendar可以试试。
Calendars必须由scheduler通过addCalendar方法实例化和注册。如用HolidayCalendar,实例化之后,可以调用其addExcludedDate方法来添加想排除的日期。同一个calendar可以被多个trigger使用,像这样:
Calendar Example
HolidayCalendar cal = new HolidayCalendar();cal.addExcludedDate( someDate );cal.addExcludedDate( someOtherDate );sched.addCalendar("myHolidays", cal, false);Trigger t = newTrigger() .withIdentity("myTrigger") .forJob("myJob") .withSchedule(dailyAtHourAndMinute(9, 30)) // execute job daily at 9:30 .modifiedByCalendar("myHolidays") // but not on holidays .build();// .. schedule job with triggerTrigger t2 = newTrigger() .withIdentity("myTrigger2") .forJob("myJob2") .withSchedule(dailyAtHourAndMinute(11, 30)) // execute job daily at 11:30 .modifiedByCalendar("myHolidays") // but not on holidays .build();// .. schedule job with trigger2
创建trigger的更多细节将在后续介绍,这里只是创建了两个每天执行的trigger,但是calendar指定的日期将被跳过。
查看org.quartz.impl.calendar,根据你的需求选择Calendar。
原文链接:
http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-04.html
- [译]Java定时任务调度-Quartz文档(四)More About Triggers
- [译]Java定时任务调度-Quartz文档(五)SimpleTrigger
- [译]Java定时任务调度-Quartz文档(二)Quartz API、Job & Scheduler
- [译]Java定时任务调度-Quartz文档(十二)Miscellaneous Features of Quartz
- [译]Java定时任务调度-Quartz文档(一)初步使用
- [译]Java定时任务调度-Quartz文档(三)进一步讲讲Job和Job Detail
- [译]Java定时任务调度-Quartz文档(七)TriggerListeners and JobListeners
- [译]Java定时任务调度-Quartz文档(九)Job Stores
- [译]Java定时任务调度-Quartz文档(十)Configuration, Resource Usage and SchedulerFactory
- [译]Java定时任务调度-Quartz文档(十一)Advanced (Enterprise) Features
- [译]Java定时任务调度-Quartz Cron 调度
- Quartz定时任务学习(四)调度器
- Quartz 定时任务调度
- quartz定时任务调度
- Quartz定时任务调度
- Java定时任务调度之Quartz
- Quartz---Java定时任务调度工具
- java定时任务调度工具-quartz
- JavaScript对象、函数的理解,$.ajaxsetup({complete:XX})中complete属性是一个函数。
- 微信h5页面开发遇到那些坑
- 利用MyBatis Generator自动创建代码
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- iText-对PDF进行数字签名和文档加密
- [译]Java定时任务调度-Quartz文档(四)More About Triggers
- iOS三种录制视频方式详细对比
- ios app 跳转到设置页面
- 3通道高清视频编码电路 转接IC GM7123:TTL转VGA芯片
- Dedecms调用缓存功能方法详解
- java验证身份证号码是否有效源代码
- redis 安装
- iOS视频边下边播--缓存播放数据流
- 图像处理之形态学梯度计算