Quartz实现定时任务
Quartz
最近公司项目中用到了定时任务提醒的功能,Timer在功能上已经无法很好的满足业务,来学习一下Quartz
Quartz 的生命周期
Job接口
在execute(JobExecation…){}中编写逻辑
调用器
执行Job时创建的Job实例,调用完成时,job实例会被释放并回收
JobDetail
属性
name 任务名称
group 任务组 默认DEFAULT
jobclass
jobDetailMap 作用是在execute中传递参数,一般为基本数据类型
......
JobDataMap&TriggerDataMap:
强力的map型参数,由quzrtz封装,同时实现了map接口
关于Quzrtz的Trigger
- 作为Quartz的触发器来执行Job
Trigger的通用属性
- Job Key: 获取JobDetail的key值
- startTime: 触发器首次触发的时间
- endTime: …停止时间
SimpleTrigger& CronTrigger
SimpleTrigger:
SimpleTrigge有点类似Java中Timer的一个变体,但是个人觉得在逻辑上比Timer要来的简便
CronTrigger:
CronTrigger是Quartz的核心,是一种基于日历的作业调度器
重点:
cron表达式:用来配置CronTrigger实例
由7个子表达式组成,描述了时间表的详细信息
格式:
[秒] [分] [小时] [日] [月] [年]
注意 []之间有空格符
事例
1 | JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class) |
其中 CronScheduleBuilder.cronSchedule("* * * * * ?"))这句就是Cron表达式的用法
关于Cron表达式的字符含义:
| 字段 | 是否必填 | 允许值 | 允许的特殊字符 |
|---|---|---|---|
| 秒 | 是 | 0-59 | , - * / |
| 分 | 是 | 0-59 | , - * / |
| 小时 | 是 | 0-23 | , - * / |
| 日 | 是 | 1-31 | , - * ? / L W C |
| 月 | 是 | 1-12或者JAN-DEC | , - * / |
| 周 | 是 | 1-7或者SUN-SAT | ,- * ? / L C # |
| 年 | 否 | empty,1970-2099 | , - * / |
| 特殊字符 | 含义 |
|---|---|
, |
表示或 的意思 |
- |
至某事某刻,between的关系 |
* |
表示每, |
/ |
表示每隔某时间段触发,比如分的写法:0/5 表示每隔5分钟触发,5/20代表每五分钟触发一次,25,45各触发一次 |
? |
表示无所谓,不关注,无关紧要 |
# |
第的意思,如6#3每月第三周星期五触发,6代表周五 |
L |
代表最后一 的意思 |
W |
表示有效工作日(周一到周五), L与W可连用,表示某月最后一个工作日 |
关于周的换算:1代表周日,6代表周五,以此类推类推
如:0 15 10 ? * 6L 2016-2017: 2016-2017年每月最后一周的周五10点15分执行
年可以不填QAQ
###SchedulerFactory
用来工厂模式来创建Schedular
StdSchedulerFactory
利用.getScheduler();方法初始创建调度器,参数配置可以采用quartz。properties方法
比较
Timer
1.无法并发执行:Timer不怎么支持并发
2.因为Timer有且仅有一个后台执行的线程,若一旦爆出RunTimeException,则会停止所有的任务执行
瓶颈:
a) 对时效性要求较高的多任务并发作业,虽然支持多任务,但是毕竟是串行接口
b) 对复杂任务的调度不足,不支持定时任务
Quartz
1.精细控制流程
2.支持若干任务在上面执行
a)调度功能
b) 持久化机制,数据不会丢失
c) 分布&集群功能
- Title: Quartz实现定时任务
- Author: obsidiannn
- Created at : 2017-07-07 16:52:09
- Updated at : 2025-03-20 00:21:52
- Link: https://blog.dadonggua.top/2017/07/07/04Quartz/
- License: This work is licensed under CC BY-NC-SA 4.0.