概述
定义任务的触发规律,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表达式
位置 | 时间域 | 特殊值 | |
---|---|---|---|
1 | 秒 | 0-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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复