所有分类
  • 所有分类
  • 未分类

SpringBoot定时任务–选型/对比

简介

在项目中我们经常会用到定时任务。本文介绍一些定时任务框架的区别。

一个好的定时任务中间件,必须要有以下功能:

  1. 有管理页面
  2. 易用性好

在实际项目中,90%都是用的XXL-JOB,因为它易用性最好。PowerJob虽然性能好,功能多,但不易用,实际项目并不需要那么高的性能!

定时任务中间件的对比

QuartZxxl-jobSchedulerX 2.0PowerJob
易用性★★★★★★★★★
是否有管理页面
定时类型CRONCRONCRON、固定频率、固定延迟、OpenAPICRON、固定频率、固定延迟、OpenAPI
支持的数据库关系型数据库 (MySQL、Oracle…)MySQL人民币(不开源)任意 Spring Data Jpa支持的关系型数据库(MySQL、Oracle…)
报警监控邮件短信邮件,提供接口允许开发者扩展
指定调度类型不确定支持不确定不支持
开发方式便捷:Bean里的方法上加注解略复杂:单个Bean实现PowerJob的指定接口。
任务类型内置Java内置Java、GLUE Java、Shell、Python等脚本内置Java、外置Java(FatJar)、Shell、Python等脚本内置Java、外置Java(容器)、Shell、Python等脚本
分布式任务静态分片MapReduce 动态分片MapReduce 动态分片
在线任务治理不支持支持支持支持
日志白屏化不支持支持不支持支持
调度方式及性能基于数据库锁 有性能瓶颈基于数据库锁 有性能瓶颈不详无锁化设计,性能强劲无上限
DAG 工作流不支持不支持支持支持

Timer、定时线程池、Spring的定时器,这三个就不写上了。这三者都没有前端页面,且不支持分布式(部署多个实例时只在一个实例上边执行定时任务)。

CRON

见:Cron(Crontab)-使用 – 自学精灵

方案1:JDK自带

见:Java-Timer-使用 – 自学精灵

方案2:定时线程池

见:Java线程池-种类(Executors的用法) – 自学精灵

简介

用newSingleThreadScheduledExecutor();

方案3:Spring Task

Spring定时任务-@Scheduled注解-使用/教程/实例 – 自学精灵

方案4:Quartz

SpringBoot整合Quartz-实例 – 自学精灵

方案5:XXL-JOB

SpringBoot整合XXL-JOB-/实例 – 自学精灵

方案6:PowerJob

SpringBoot整合PowerJob-实例 – 自学精灵

0

评论4

请先

  1. PowerJob和xxl-job都需要部署单独的服务来实现,在现实生产上很多老项目都不会支持这么做吧,在一些老项目里还是QuartZ用的多
    150003 2024-04-13 0
    • 粗略估计使用率:2020年之后的分布式项目,xxl-job大约占85%,powerjob占5%,quartz占5%,Spring自带的定时任务结合分布式锁占5%。
      自学精灵 2024-04-13 0
      • 我的意思是,现实中分布式项目的占比并没有那么高,大多数还是单机或者组网模式
        150003 2024-04-13 0
        • 分布式项目的占比,与个人经历有关。可能你的经历是单体项目多,我的经历是:2020年后几乎没做过单体项目,全是分布式。
          自学精灵 2024-04-14 0
显示验证码
没有账号?注册  忘记密码?

社交账号快速登录