1,触发器有一个startTime 和 endTime 属性,startTime 规定Trigger何时生效,endTime规定Trigger何时失效。
2,Trigger的优先级:Quartz管理着一个线程池,用来进行作业的执行。当可用线程数目少于目前待调度的作业数目时,哪个作业的Trigger优先级高,该作业就会优先分配 work thread 执行。当然,作业的Trigger优先级的比较只在具有相同调度时间的作业之间比较,如所有10点钟执行的作业;而9点钟执行的作业的Trigger优先级尽管低于10点钟作业的Trigger优先级。显然,9点钟的作业还是先执行的。
3,Misfire Instructions----错过作业触发时机时怎么办?
Quartz中有一个默认的处理机制--"smart policy"机制。同时,你也可以在为作业配置Triggers时,明确指定作业的misfire instructions。当使用“smart policy”机制时,对于SimpleTrigger而言,它会动态地选择一个合适的触发机制,SimpleTrigger.updateAfterMisfire()方法解释了此种情况下如何触发作业。
SimpleTrigger以常量的形式预定义了一些触发机制,这些机制如下:
MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY
MISFIRE_INSTRUCTION_FIRE_NOW
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT
4,Quartz提供了一个Calendar对象(不是java.util.Calendar)来更加精细化地设置作业的触发条件。Calendar主要的用途就是:在需要重复地调度作业时,排除某些特殊的日期(比如周末时不执行作业)。
5,如何构造一个Trigger,Trigger监听器能监听什么?
Trigger的构造主要牵涉到三个类:TriggerBuilder、SimpleScheduleBuilder、DateBuilder。通过静态导入,可以以一种DSL语言风格形式来编写代码。Trigger监听器可以监听Trigger在指定的时间被触发了,或者未被触发。也可监听Trigger已经触发“完毕”。
6,如何创建监听器,如何注册监听器?
创建Trigger监听器:implements TriggerListener 接口或者继承TriggerListenerSupport类。implements TriggerListener 接口需要实现接口中定义的所有的方法,而继承TriggerListenerSupport类只需要重写(Override)自己感兴趣的方法。同理创建Job监听器。
监听器的注册需要ListenerManager类来管理注册的监听器,并需要Matcher类来匹配在事件发生时,是哪个Job执行需要执行何种操作。
7,调度监听器--SchedulerListener
调度器监听器监听的事件包括:Job/Trigger的执行或触发、Job/Trigger的删除、通知调度器即将关闭以及调度器本身出错。
8,作业的存储--RAMJobStore 和 JDBCJobStore
RAMJobStore 把整个作业存储在内存中,作业运行完成后,就被删除了。
JDBCJobStore 将作业存储在数据库中,在使用JDBCJobStore之前,必须先配置好数据库,并创建一系列的数据库表来存储作业的相关信息。
在Quartz安装包的"docs/dbTables"目录下已经有相关的数据库操作脚本来创建这些表了,只需要修改一下符合自己安装的数据库即可。
本文转自hapjin博客园博客,原文链接:http://www.cnblogs.com/hapjin/p/4903417.html,如需转载请自行联系原作者