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表达式
位置 | 时间域 | 特殊值 | |
---|---|---|---|
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任务执行出现漏执行的问题分析--转
原文地址:http://blog.csdn.net/dailywater/article/details/51470779 一.问题描述 使用Quartz配置定时任务,配置了超过10个定时任务,这些 ...
- Quartz框架中的JobStore
问题:最多可以运行多少个任务(磁盘.内存.线程数) Jobstore用来存储任务和触发器相关的信息,例如所有任务的名称.数量.状态等等.Quartz中有两种存储任务的方式,一种在在内存,一种是在数据库 ...
- Quartz框架中的Listener
我们有这么一种需求,在每个任务运行结束之后发送通知给运维管理员.那是不是要在每个任务的最后添加一行代码呢?这种方式对原来的代码造成了入侵,不利于维护.如果代码不是写在任务代码的最后一行,怎么知道任务执 ...
- Quartz框架中的Scheduler
调度器,是 Quartz的指挥官,由 StdSchedulerFactory产生.它是单例的.并且是 Quartz中最重要的 API,默认是实现类是 StdScheduler,里面包含了一个Quart ...
- Quartz框架之触发器(3)
1 关于Quartz的触发器 Quartz框架中的触发器的主要功能就是指明何时该触发任务的执行, 触发器包含一系列的定义信息,开发人员可根据实际情形自定义对应的触发器. triggerKey 用于分组 ...
- SpringBoot - 集成Quartz框架:Couldn‘t acquire next trigger: Couldn‘t retrieve trigger: 不良的类型值 long : \x
写在前面 SpringBoot 集成Quartz框架时,数据保存方式使用PostgreSQL进行数据库持久化. 报错如下: Couldn't acquire next trigger: Couldn' ...
- Quartz 框架快速入门(二)
尽可能的用声明式处理软件配置,其次才考虑编程式的方式.在上一篇<Quartz 框架快速入门(一)>中,如果我们要在 Job 启动之后改变它的执行时间和频度,必须去修改源代码重新编译.这种方 ...
- Quartz 框架快速入门(三)
在前面两篇文章中简单介绍了在java应用程序中如何使用Quartz框架,这一篇中我们将看到如何在web环境下通过配置文件来完成Quartz的后台作业调度,而不必手工去创建Trigger和Schedul ...
- SpringBoot与quartz框架实现分布式定时任务
前言 quartz的分布式调度策略是以数据库为边界资源的一种异步策略.各个调度器都遵守一个基于数据库锁的操作规则从而保证了操作的唯一性. 在quartz的集群解决方案里有张表scheduler_loc ...
最新文章
- Linux基础命令---文本格式转换expand、unexpand
- 后台开发经典书籍--Linux多线程服务端编程:使用muduo C++网络库
- 10个免费的javascript富文本编辑器(jQuery and non-jQuery)
- python从图片里提取主要颜色
- 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 5丨至少有5名直接下属的经理【难度中等】
- mysql 判断日志时间早_MySQL5.7慢查询日志时间与系统时间差8小时原因详解
- Atitit postgresql data type 数据类型与mysql对应表 数据库常用数据类型 	Postgre	Mysql	 整数	intgreter	Int	 小数	numeric	FL
- linux 下tftp服务器搭建,CentOS 6下搭建TFTP服务器
- 使用vue构建一个可视化大数据平台
- 检察院计算机知识试卷,2014河南检察院考试备考:计算机专业课试题练习
- win10+ASP.NET(VS2019)连接sqlsever数据库
- 将社会工程学演绎成艺术---弗兰克·威廉·阿巴内尔的传奇故事--黑客博客
- linux下puts和gets命令用法,puts()和gets()函数(示例代码)
- dellnas存储服务器型号,Dell Storage NX系列NAS存储
- Java主要就业方向有哪些?
- WhatsAPP营销详细攻略,带你一镜到底的了解WhatsAPP营销
- MySQL 服务器是什么_什么是 MySQL?
- java 注解处理_在java代码中,看到注解,如何查看注解处理器
- MYSQL进阶(一)
- 从零开始,用5年时间,攒够100w,如何够到800w 上海房