Java之定时任务全家桶
定时任务应用非常广泛,Java提供的现有解决方案有很多。
本次主要讲schedule、quartz、xxl-job、shedlock等相关的代码实践。
一、SpringBoot使用Schedule
核心代码:
1 | @Component |
运行效果如下:
除此之外还可以这样实现,核心代码:
1 | @PropertySource(value = { |
有朋友或许很疑惑,为什么要写这么一大堆,这个与前面的代码又有何区别呢?
区别是多线程并行。其实多线程并行也可以不用这么写,只需写一段核心配置类代码即可。
定时任务多线程配置类:
1 | @Configuration |
再次启动,查看效果,如下:
由此看出走不同的线程执行,不同的线程执行的好处是,如果某一个线程挂掉后,并不会阻塞导致其它定时任务无法执行。
另外如果要想并发执行,前面的配置可以不要,直接用SpringBoot提供的现成注解即可,核心代码如下:
1 | @Component |
除此外,还有基于schedule动态定时任务(所谓动态只不过是指cron表达式放在对应的数据表里),简单示例代码:
1 | @Configuration |
核心配置文件(application.yml):
1 | spring: |
SQL脚本:
1 | DROP DATABASE IF EXISTS `test`; |
运行效果如下:
二、SpringBoot使用Quartz
1.Maven依赖
1 |
|
2.配置文件
1 | spring: |
3.启动类
1 | @SpringBootApplication |
4.配置类
1 | @Configuration |
5.定时任务类
1 | public class CouponTimeOutJob extends QuartzJobBean { |
6.启动成功不报错
(1)对应的数据库会生成定时任务相关的数据表
(2)控制台不断输出定时任务执行日志
三、SpringBoot使用xxl-job
之前写过一样的例子,如今简化了下。
关于xxl-job使用详情,可以参考我的这篇文章:
SpringBoot整合Xxl-Job
1.Maven依赖
1 |
|
2.配置类
1 | @Configuration |
3.配置文件内容
1 | # web port |
4.定时任务类
1 | @Component |
5.执行效果
分别如下所示:
四、SpringBoot使用ShedLock
1.导入Maven依赖
1 |
|
2.编写配置类
1 | @Configuration |
3.编写具体的定时任务
1 | @Component |
4.编写启动类
1 | @SpringBootApplication |
5.配置文件
1 | server: |
6.测试
我之所以用shedlock是因为确保在集群环境下各微服务的定时任务只执行一个,而不是全部都运行相同的定时任务。
本次测试效果如下:
本次代码例子已放至我的GitHub:
https://github.com/developers-youcong/blog-job
source: https://developers-youcong.github.io/2020/11/21/Java之定时任务全家桶/
喜欢,在看
评论