springboot 2.0 教程-08-定时任务和Quartz
阅读原文:https://blog.bywind.cn/articles/2018/11/28/1543373589258.html
****:https://www.bilibili.com/video/av35595465
课程源码:https://github.com/ibywind/springboot-learn
关注公众号 查看更多技术干货
还可加群 , 众多好基友在等你
springboot 书籍 PDF 下载
扫描关注上方公众号
回复关键字 boot
就可以下载这本书了
书籍的排版很好的,我自己也在看.大家可以一起交流哦
写在前面
hello 大家好
欢迎大家收看御风大世界
本次课是
springboot 系列教程第8课
我将为大家演示
springboot 如何集成Quartz 来处理定时任务
什么是定时任务?
在项目中我们经常需要实现定时任务
在特定的时间区间 间隔 来执行 既定的程序代码
比如周期性的 页面PV统计
日 周 月 订单总金额统计等等
还需要定时清洗数据 ETL
如果是非常简单的 一些定时任务的话
我们可以考虑使用JDK中的Timer定时任务来实现
主流定时任务框架
目前开源的主流定时任务框架
基于单节点的
Quartz
基于分布式的
当当网 elastic-job
如果大家对于 elastic-job 很感兴趣的话
我后期也会为大家 做这个方面的教程
不过我们公司自己也有 分布式任务的具体实现
由于我们公司自研产品这里我就不方便透露了
具体思路我感觉 都差不多的
elastic-job 作为开源的一个分布式定时任务调度框架
还是很优秀的
之前的公司用到过
OK 我们回来讲解
Quartz
我们来到springboot的官网
这个地方
我们看到 springboot官方解释
默认情况下任务的生命周期 是存储在 内存的
但是 你也可以选择将他们外接到数据存储
springboot集成
首先
我们spirngboot自己就有很好的 定时任务功能
并不需要集成其他 定时任务框架
我们只需要加入这个注解
就可以让springboot开启 定时任务的一些功能
然后我们需要写一个定时任务的代码
这个地方在方法上面加一个 定时任务的注解
给他一个 crontab 表达式 (跟多例子在下面)
到这里就结束了
只要启动springboot项目 这个 定时任务就会随之启动
同时 springboot 也做了一些线程池 异步 的优化
你只需要做一个统一的配置就可以了
这样你的任务 就可以启用多线程的方式来执行了
更加高效
如果你需要用到 quartz 定时任务框架
也是没有问题的
首先需要在pom.xml中引入依赖
然后就可以写代码了
这个地方 定义的是我们定时任务执行的一个 具体逻辑代码
就是你要定时来干什么东西
接下来就是结合quartz框架做一些配置了
这里他采用了 配置 和 逻辑 分离的设计
配置这一块的代码
我们用的是builder 模式
链式编程看起来很爽哦
然后 springboot启动的时候 这个 也是会启动的
我们可以在配置文件中对于quartz做一些配置
这里我之间用默认的就好了
我们需要用到cron表达式 下面这个 希望可以帮到你
三、常用表达式例子
(1)**0 0 2 1 * ? *** 表示在每月的1日的凌晨2点调整任务
(2)**0 15 10 ? * MON-FRI ** 表示周一到周五每天上午10:15执行作业
(3)0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月最后一个星期五上午10:15执行作
(4)0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
(5)0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
(6)0 0 12 ? * WED 表示每个星期三中午12点
(7)0 0 12 * * ? 每天中午12点触发
(8)**0 15 10 ? * * ** 每天上午10:15触发
(9)0 15 10 * * ? 每天上午10:15触发
(10)**0 15 10 * * ? * ** 每天上午10:15触发
(11)0 15 10 * * ? 2005 2005年的每天上午10:15触发
(12)0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
(13)0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
(14)0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
(15)**0 0-5 14 * * ? ** 在每天下午2点到下午2:05期间的每1分钟触发
(16)0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
(17)**0 15 10 ? * MON-FRI ** 周一至周五的上午10:15触发
(18)**0 15 10 15 * ? ** 每月15日上午10:15触发
(19)**0 15 10 L * ? ** 每月最后一日的上午10:15触发
(20)**0 15 10 ? * 6L ** 每月的最后一个星期五上午10:15触发
(21)0 15 10 ? * 6L 2002-2005 2002年至2005年的每月最后一个星期五上午10:15触发
(22)0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发
代码和测试
这块是 quartz框架 打印出来的一些信息
我们会发现 两种方式的 定时任务都启动了
整个过程很顺利
结束语
如果大家对于这里比较感兴趣的话
可以去B站查看我的视频讲解
https://space.bilibili.com/193580090/#/
或者是在 github下载源码