Quartz

这里是修真院后端小课堂,每篇分享文从

八个方面深度解析后端知识/技能,本篇分享的是:

【Quartz】

【修真院Java小课堂】任务调度-Quartz

开场语:

大家好,我是IT修真院北京分院第32期的学员廖友,一枚正直纯洁善良的Java程序员,今天给大家分享一下,修真院官网Java任务十中的知识点——任务调度-Quartz

一、背景介绍:

1、任务调度概念

任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。

2、任务调度应用场景

场景一:聚划算 整点抢红包

场景二:双十一实时统计交易额

以上两种场景都可以通过定时任务来实现,分别是按按指定时间执行任务、固定频率执行任务两种。

3、任务调度的几种Java实现

Timer

ScheduledExecutor

Spring Scheduled

开源工具包 Quartz

开源工具包 JCronTab

二、知识剖析:

1、Quartz核心概念

任务Job:做什么工作

触发器Trigger:什么时候工作

调度器Scheduler:将Job和Trigger整合到一块创建一个作业计划,即什么时候做什么事

2、Quartz的几个核心接口

Job是一个接口,只有一个方法execute,定义作业时需要实现此接口的execute方法。

JobDetail:JobDetail是一个接口,通过JobDetail的实现类可以设置具体的执行job,并且可以给执行的job设置名称、分组以及参数。

Trigger:Trigger是一个接口,用以设置触发Job执行的时间触发规则。主要有SimpleTrigger和CronTrigger两个实现类。SimpleTrigger适用于单次执行或固定周期计划任务执行。CronTrigger可以通过Cron表达式定义出各种复杂时间规则的调度计划。

Scheduler:Scheduler是一个接口,它提供了对作业计划的启动、停止、恢复、删除等操作,它通过JobDetail和Trigger创建一个作业计划。

3、cron表达式


由七个部分组成,从左到右依次为:秒 分 时 日 月 星期 年 。其中年可选,一般都用不上。

特殊符号:

星号(*):可用在所有字段中,表示对应时间域的每一个时刻,如在分钟时段,表示”每分钟“。可以理解为通配符,通配所有时间。

问号(?):只在日期和星期字段使用,它通常指定为”无意义的值“。

减号(-):表示一个范围,如在小时字段使用”10-12“,表示从10点到12点,即10 11 12。

逗号(,):表示一个列表值,如在小时字段使用”5,7,10“,表示5点,7点,10点。

(/):表示间隔时间

4、cron练习

“0 0 12 * * ?” 每天中午12点触发

“0 * 14 * * ?” 在每天下午2点到下午2:59期间的每1分钟触发

“0 0/5 14 * * ?” 在每天下午2点到下午2:55期间的每5分钟触发

“0 0-5 14 * * ?” 在每天下午2点到下午2:05期间的每1分钟触发

在线生成cron表达式:http://cron.qqe2.com/

5、springboot整合Quartz

三、编码实战

四、参考文献:

[1]https://www.ibm.com/developerworks/cn/java/j-lo-taskschedule/

[2]http://www.quartz-scheduler.org/

五、更多讨论:

Q1:任务调度的几种Java实现有什么区别?

A1:Timer是jdk最开始添加的任务调度器,但它只能单线程运行,即每个任务是串行的,一次只能执行一个任务,所以后来Java开发了ScheduledExecutor。Spring Scheduled是Spring自带的,使用方便,只需添加注解即可,对于简单的任务特别合适,而Quartz是一个专门的任务调度框架,适合复杂的任务调度和分布式调度。

Q2:在使用cron表达式时,若设置的时间不在字段范围会怎么样?

A2:在程序运行时会抛出异常并给出提示。

Q3:对于cron表达式,为什么推荐省去最后一位?

A3:首先最后一位表示年,这个在项目中不常用,其次在有些环境中,不支持七位的cron表达式,只支持六位的cron表达式。

六、结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值