定时任务 - Spring 整合 QuartZ

小课堂

分享人: 韦杰

目录

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

场景一:

天猫双11在3分01秒成交额就超过100亿,1小时49秒成交额超过571亿。这种实时统计产品销量的功能怎么实现?


场景二:

热门产品指定时间发售怎么实现?


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

2.知识剖析

1、QuartZ的组成

1)Scheduler是一个接口,它提供了对作业计划的启动、停止、恢复、删除、和对作业计划的重新制定的方法。它通过JobDetail和trigger创建一个作业计划。

2)Job是一个接口,只有一个需要实现的方法void execute(JobExecutionContext context)。程序中需要被执行的作业就需要在exeute中实现。

3)JobDetail是一个类。通过JobDetail可以设置具体执行的Job,并且给执行的Job设置名称、组、描述等信息。该类包括一个JobDetail(String name, String group, Class jobClass)构造器,它的参数分别是Job名称、组名和实现了Job接口的实现类。

4)Trigger是一个类。主要用于设置触发Job执行的时间触发规则。主要有SimpleTrigger和CronTrigger这两个子类。SimpleTrigger擅长执行单次执行或者固定周期计划任务执行。而CronTrigger则可以通过Cron表达式定义出各种复杂时间规则的调度方案。

2、Cron表达式

1)结构:

Cron表达式由7个部分组成,各部分用空格隔开,例如

0 0 12 ? * WED(每星期三下午12:00 执行)

Cron表达式的7个部分从左到右代表的含义如下:

Seconds Minutes Hours Day-of-Month Month Day-of-Week Year

其中Year是可选的

3、各部分可选值

4、练习

1)*/5 * * * * ?

2)0 */1 * * * ?

3)0 0 23 * * ?

4)0 0 1 ? * *

5)0 0 1 1 * ?

6)0 26,29,33 * * * ?

5、答案

1)*/5 * * * * ? 每隔5秒执行一次

2)0 */1 * * * ? 每隔1分钟执行一次

3)0 0 23 * * ? 每天23点执行一次

4)0 0 1 ? * * 每周日凌晨1点执行一次

5)0 0 1 1 * ? 每月1号凌晨1点执行一次

6)0 26,29,33 * * * ? 在26分、29分、33分执行一次

3.常见问题

Spring 如何整合 QuartZ

4.解决方案

1、依赖:

spring-context-support.jar

spring-tx.jar

quartz.jar

注意:Spring 和 QuartZ 版本匹配问题

2、步骤

一个普通java类

配置JobDetail、Trigger 、Scheduler

5.代码实战

6.拓展思考

如何动态的修改一个定时任务的cron表达式?

7.参考文献

参考1:QuartZ Cron表达式详解

参考2:Spring 集成 QuartZ实例

8.更多讨论

鸣谢

感谢大家观看

BY : 韦杰

Contact GitHub API Training Shop Blog About