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 2.0 教程-08-定时任务和Quartz

springboot 书籍 PDF 下载

扫描关注上方公众号
回复关键字 boot
就可以下载这本书了
书籍的排版很好的,我自己也在看.大家可以一起交流哦
springboot 2.0 教程-08-定时任务和Quartz

写在前面

hello 大家好

欢迎大家收看御风大世界

本次课是

springboot 系列教程第8课

我将为大家演示

springboot 如何集成Quartz 来处理定时任务

什么是定时任务?

springboot 2.0 教程-08-定时任务和Quartz

在项目中我们经常需要实现定时任务

在特定的时间区间 间隔 来执行 既定的程序代码

比如周期性的 页面PV统计

日 周 月 订单总金额统计等等

还需要定时清洗数据 ETL

如果是非常简单的 一些定时任务的话

我们可以考虑使用JDK中的Timer定时任务来实现

主流定时任务框架

目前开源的主流定时任务框架

基于单节点的

Quartz

基于分布式的

当当网 elastic-job

springboot 2.0 教程-08-定时任务和Quartz

如果大家对于 elastic-job 很感兴趣的话

我后期也会为大家 做这个方面的教程

不过我们公司自己也有 分布式任务的具体实现

由于我们公司自研产品这里我就不方便透露了

具体思路我感觉 都差不多的

elastic-job 作为开源的一个分布式定时任务调度框架

还是很优秀的

之前的公司用到过

OK 我们回来讲解

Quartz

springboot 2.0 教程-08-定时任务和Quartz我们来到springboot的官网

这个地方

我们看到 springboot官方解释

默认情况下任务的生命周期 是存储在 内存的

但是 你也可以选择将他们外接到数据存储

springboot集成

首先

我们spirngboot自己就有很好的 定时任务功能

并不需要集成其他 定时任务框架

springboot 2.0 教程-08-定时任务和Quartz

我们只需要加入这个注解

就可以让springboot开启 定时任务的一些功能

然后我们需要写一个定时任务的代码

springboot 2.0 教程-08-定时任务和Quartz

这个地方在方法上面加一个 定时任务的注解

给他一个 crontab 表达式 (跟多例子在下面)

到这里就结束了

只要启动springboot项目 这个 定时任务就会随之启动

同时 springboot 也做了一些线程池 异步 的优化

你只需要做一个统一的配置就可以了

springboot 2.0 教程-08-定时任务和Quartz

这样你的任务 就可以启用多线程的方式来执行了

更加高效

如果你需要用到 quartz 定时任务框架

也是没有问题的

首先需要在pom.xml中引入依赖

springboot 2.0 教程-08-定时任务和Quartz

然后就可以写代码了

springboot 2.0 教程-08-定时任务和Quartz

这个地方 定义的是我们定时任务执行的一个 具体逻辑代码

就是你要定时来干什么东西

接下来就是结合quartz框架做一些配置了

springboot 2.0 教程-08-定时任务和Quartz

这里他采用了 配置 和 逻辑 分离的设计

配置这一块的代码

我们用的是builder 模式

链式编程看起来很爽哦

然后 springboot启动的时候 这个 也是会启动的

我们可以在配置文件中对于quartz做一些配置

springboot 2.0 教程-08-定时任务和Quartz

这里我之间用默认的就好了

我们需要用到cron表达式 下面这个 希望可以帮到你

springboot 2.0 教程-08-定时任务和Quartz

三、常用表达式例子

  (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触发

代码和测试

springboot 2.0 教程-08-定时任务和Quartz

springboot 2.0 教程-08-定时任务和Quartz

这块是 quartz框架 打印出来的一些信息

springboot 2.0 教程-08-定时任务和Quartz

我们会发现 两种方式的 定时任务都启动了

整个过程很顺利

结束语

如果大家对于这里比较感兴趣的话

可以去B站查看我的视频讲解

https://space.bilibili.com/193580090/#/

或者是在 github下载源码

https://github.com/ibywind/springboot-learn