分享人: 韦杰
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
场景一:
天猫双11在3分01秒成交额就超过100亿,1小时49秒成交额超过571亿。这种实时统计产品销量的功能怎么实现?
场景二:
热门产品指定时间发售怎么实现?
以上两种场景都可以通过定时任务来实现,分别是按固定频率执行任务、按指定时间执行任务两种。
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表达式定义出各种复杂时间规则的调度方案。
1)结构:
Cron表达式由7个部分组成,各部分用空格隔开,例如
0 0 12 ? * WED(每星期三下午12:00 执行)
Cron表达式的7个部分从左到右代表的含义如下:
Seconds Minutes Hours Day-of-Month Month Day-of-Week Year
其中Year是可选的
1)*/5 * * * * ?
2)0 */1 * * * ?
3)0 0 23 * * ?
4)0 0 1 ? * *
5)0 0 1 1 * ?
6)0 26,29,33 * * * ?
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分执行一次
Spring 如何整合 QuartZ
1、依赖:
spring-context-support.jar
spring-tx.jar
quartz.jar
注意:Spring 和 QuartZ 版本匹配问题
2、步骤
一个普通java类
配置JobDetail、Trigger 、Scheduler
如何动态的修改一个定时任务的cron表达式?
参考1:QuartZ Cron表达式详解
感谢大家观看
BY : 韦杰