我是靠谱客的博主 诚心篮球,最近开发中收集的这篇文章主要介绍Quartz框架中的Trigger,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

定义任务的触发规律,Trigger,使用 TriggerBuilder来构建。

JobDetail跟 Trigger是 1:N的关系。

思考:为什么要解耦?

Trigger接口在 Quartz有 4个继承的子接口:

 

子接口描述特点
SimpleTrigger简单触发器固定时刻或时间间隔,毫秒
CalendarIntervalTrigger基于日历的触发器比简单触发器更多时间单位,支持非固定时
间的触发,例如一年可能365/366,一个月
可能28/29/30/31
DailyTimeIntervalTrigger基于日期的触发器每天的某个时间段
CronTrigger基于Cron 表达式的触发器 

MutableTrigger和 CoreTrigger最终也是用到以上四个类的实现类。

SimpleTrigger

SimpleTrigger可以定义固定时刻或者固定时间间隔的调度规则(精确到毫秒)。
例如:每天 9点钟运行;每隔 30分钟运行一次。 

CalendarIntervalTrigger

CalendarIntervalTrigger可以定义更多时间单位的调度需求,精确到秒。
好处是不需要去计算时间间隔,比如 1个小时等于多少毫秒。
例如每年、每个月、每周、每天、每小时、每分钟、每秒。
每年的月数和每个月的天数不是固定的,这种情况也适用。 


DailyTimeIntervalTrigger

每天的某个时间段内,以一定的时间间隔执行任务。
例如:每天早上 9点到晚上 9点,每隔半个小时执行一次,并且只在周一到周六执行。

CronTrigger

CronTirgger可以定义基于 Cron表达式的调度规则,是最常用的触发器类型。

Cron表达式

位置时间域 特殊值
10-59, - * /
2分钟0-59, - * /
3小时0-23, - * /
4日期1-31, - * ? / L W C
5月份1-12, - * /
6星期1-7, - * ? / L W C
7年份(可选)1-31, - * /

L:该字符只在日期和星期字段中使用,代表“ Last”的意思,但它在两个字段中意思不同。 L在日期字段中,表示这个月份的最后一天,如一月的 31号,非闰年二月的 28号;如果 L用在星期中,则表示星期六,等同于 7。但是,如果 L出现在星期字段里,而且在前面有一个数值 X,则表示“这个月的最后 X天”,例如, 6L表示该月的最后星期五; 

W:该字符只能出现在日期字段里,是对前导日期的修饰,表示离该日期最近的工作日。例如 15W表示离该月 15号最近的工作日,如果该月 15号是星期六,则匹配 14号星期五;如果 15日是星期日,则匹配 16号星期一;如果15号是星期二,那结果就是15号星期二。但必须注意关联的匹配日期不能够跨月,如你指定 1W,如果 1号是星期六,结果匹配的是 3号星期一,而非上个月最后的那天。W字符串只能指定单一日期,而不能指定日期范围; 

LW组合:在日期字段可以组合使用 LW,它的意思是当月的最后一个工作日;

井号 (#):该字符只能在星期字段中使用,表示当月某个工作日。如 6#3表示当月的第三个星期五 (6表示星期五, #3表示当前的第三个 ),而 4#5表示当月的第五个星期三,假设当月没有第五个星期三,忽略不触发; 

C:该字符只在日期和星期字段中使用,代表“ Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如 5C在日期字段中就相当于日历 5日以后的第一天。 1C在星期字段中相当于星期日后的第一天。
 
Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不敏感。上面我们定义的都是在什么时间执行,但是我们有一些在什么时间不执行的需求,比如:理财周末和法定假日购买不计息;证券公司周末和法定假日休市。是不是要把日期写在数据库中,然后读取基于当前时间判断呢?

 

最后

以上就是诚心篮球为你收集整理的Quartz框架中的Trigger的全部内容,希望文章能够帮你解决Quartz框架中的Trigger所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部