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表达式。 六、结束语: 今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~ PPT链接?视频链接 更多内容,可以加入IT交流群565734203与大家一起讨论交流 这里是技能树·IT修真院:,初学者转行到互联网的聚集地 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |