定时任务特辑 | Quartz、xxl-job、elastic-job、Cron四个定时任务框架对比,和Spring Boot集成实战

专栏集锦,大佬们可以收藏以备不时之需:

Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9

Python 专栏:http://t.csdnimg.cn/hMwPR

Redis 专栏:http://t.csdnimg.cn/Qq0Xc

TensorFlow 专栏:http://t.csdnimg.cn/SOien

Logback 专栏:http://t.csdnimg.cn/UejSC

量子计算:

量子计算 | 解密著名量子算法Shor算法和Grover算法

AI机器学习实战:

AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析

AI机器学习 | 基于librosa库和使用scikit-learn库中的分类器进行语音识别

Python实战:

Python实战 | 使用 Python 和 TensorFlow 构建卷积神经网络(CNN)进行人脸识别

Spring Cloud实战:

Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用

Spring Cloud 实战 | 解密Feign底层原理,包含实战源码

Spring Cloud 实战 | 解密负载均衡Ribbon底层原理,包含实战源码

1024程序员节特辑文章:

1024程序员狂欢节特辑 | ELK+ 协同过滤算法构建个性化推荐引擎,智能实现“千人千面”

1024程序员节特辑 | 解密Spring Cloud Hystrix熔断提高系统的可用性和容错能力

1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面”

1024程序员节特辑 | OKR VS KPI谁更合适?

1024程序员节特辑 | Spring Boot实战 之 MongoDB分片或复制集操作

Spring实战系列文章:

Spring实战 | Spring AOP核心秘笈之葵花宝典

Spring实战 | Spring IOC不能说的秘密?

国庆中秋特辑系列文章:

国庆中秋特辑(八)Spring Boot项目如何使用JPA

国庆中秋特辑(七)Java软件工程师常见20道编程面试题

国庆中秋特辑(六)大学生常见30道宝藏编程面试题

国庆中秋特辑(五)MySQL如何性能调优?下篇

国庆中秋特辑(四)MySQL如何性能调优?上篇

国庆中秋特辑(三)使用生成对抗网络(GAN)生成具有节日氛围的画作,深度学习框架 TensorFlow 和 Keras 来实现

国庆中秋特辑(二)浪漫祝福方式 使用生成对抗网络(GAN)生成具有节日氛围的画作

国庆中秋特辑(一)浪漫祝福方式 用循环神经网络(RNN)或长短时记忆网络(LSTM)生成祝福诗词

在这里插入图片描述

1、Quartz、xxl-job、elastic-job、Cron四个定时任务框架详细介绍

  1. Quartz
    Quartz 是一款基于 Java 的开源调度框架,可以用于在指定时间执行任务或在指定时间间隔内重复执行任务。它提供了丰富的 API 和灵活的配置选项,可以满足各种不同的调度需求。Quartz 支持集群部署,可以实现任务的分布式调度。
    优点:强大的调度功能,支持集群部署,提供丰富的 API 和灵活的配置选项。
    缺点:学习曲线较陡峭,配置相对复杂,没有自带的管理界面,调度逻辑和执行任务耦合在一起。
    发展历史:Quartz 最初由 Netflix 开发,后来成为了一个流行的 Java 调度框架。
    应用场景:Quartz 适用于需要进行复杂调度和分布式调度的场景,例如大数据处理、日志收集等。
    官网和社区:Quartz 的官方网站为 https://github.com/quartz-scheduler/quartz,社区非常活跃,有大量的开发者和使用者在该社区中分享经验、提问和解决问题。
    注意事项:在使用 Quartz 时,需要关注任务的并发问题,避免出现任务冲突。此外,在分布式场景下,需要确保任务在各个节点之间的数据一致性。
    常见问题及解决方法:
  • 问题:任务冲突导致任务无法正常执行。
    解决方法:可以通过设置任务调度器的方式来避免任务冲突,例如设置任务的唯一性、设置任务的执行时间等。
    在这里插入图片描述
  1. xxl-job
    xxl-job 是一款国内开源的分布式任务调度平台,提供了任务调度、任务执行、任务监控、报警等功能,支持分布式部署,适用于大规模分布式任务调度场景。xxl-job 提供了可视化界面进行操作,可以集中化管理任务。
    优点:支持集群部署,提供运维界面,维护成本小,自带错误预警,支持调度策略,支持分片,故障转移。
    缺点:相对 Quartz 来说需要多部署调度中心。
    发展历史:xxl-job 最初由阿里巴巴集团开发,成为了一个流行的 Java 调度框架。
    应用场景:xxl-job 适用于需要进行分布式任务调度的场景,例如大规模分布式系统中的任务调度。
    官网和社区:xxl-job 的官方网站为 https://github.com/xuxueli/xxl-job,社区非常活跃,有大量的开发者和使用者在该社区中分享经验、提问和解决问题。
    注意事项:在使用 xxl-job 时,需要关注任务的并发问题,确保任务在分布式场景下的稳定性。同时,要充分利用其提供的错误报警功能,及时发现并处理任务故障。
    常见问题及解决方法:
  • 问题:任务无法正常执行。
    解决方法:可以通过检查任务日志、分析任务依赖关系等方式来定位问题,并进行相应的修复。
    在这里插入图片描述
  1. elastic-job
    elastic-job 是一款国内开源的分布式任务调度框架,提供了分布式任务调度、分布式数据流处理、分布式数据分片等功能,支持多种任务类型,适用于大规模分布式任务调度和数据处理场景。
    优点:支持集群部署,维护成本小。
    缺点:没有自带的管理界面,学习曲线较陡峭。
    发展历史:elastic-job 最初由阿里巴巴集团开发,成为了一个流行的 Java 调度框架。
    应用场景:elastic-job 适用于需要进行分布式任务调度和数据处理的场景,例如大数据处理。
    官网和社区:elastic-job 的官方网站为 https://github.com/elasticjob/elastic-job,社区非常活跃,有大量的开发者和使用者在该社区中分享经验、提问和解决问题。
    注意事项:在使用 elastic-job 时,需要关注任务的并发问题,确保任务在分布式场景下的稳定性。同时,要充分利用其提供的错误报警功能,及时发现并处理任务故障。
    在这里插入图片描述

常见问题及解决方法:

  • 问题:任务无法正常执行。
    解决方法:可以通过检查任务日志、分析任务依赖关系等方式来定位问题,并进行相应的修复。
  1. Cron
    Cron 是一款基于 Java 的定时任务管理框架,可以将本地服务中所有的定时任务统一管理起来。使用简单,支持秒级别的定时任务。
    优点:使用简单,支持秒级别的定时任务。
    缺点:功能相对较少,仅适用于简单的定时任务调度。
    发展历史:Cron 最初由阿里巴巴集团开发,成为了一个流行的 Java 定时任务框架。
    应用场景:Cron 适用于需要进行简单定时任务调度的场景,例如定时统计报表、定时数据同步等。
    官网和社区:Cron 的官方网站为 https://github.com/apache/skywalking/tree/master/plugins/timelog,社区非常活跃,有大量的开发 者在该社区中分享经验、提问和解决问题。
    注意事项:在使用 Cron 时,需要关注任务的并发问题,避免出现任务冲突。同时,Cron 可能会受到其他应用程序或系统环境的影响,因此需要确保任务在执行过程中的稳定性。
    常见问题及解决方法:
  • 问题:任务冲突导致任务无法正常执行。
    解决方法:可以通过设置任务调度器的方式来避免任务冲突,例如设置任务的唯一性、设置任务的执行时间等。
  • 问题:任务执行失败或无法执行。
    解决方法:可以通过检查任务日志、分析任务依赖关系等方式来定位问题,并进行相应的修复。

2、Quartz、xxl-job、elastic-job、Cron四个定时任务框架和Spring Boot项目集成实战

  1. Quartz
    Quartz 集成 Spring Boot 需要将 Quartz 作为 Spring Boot 的一个外部依赖引入。首先在 Maven 项目的 pom.xml 文件中添加 Quartz 的依赖:
<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.2</version>
</dependency>

然后在 Spring Boot 项目的 application.properties 文件中添加相关的配置,例如:

# 配置 Quartz 数据源
spring.datasource.url=jdbc:mysql://localhost:3306/quartz_db?useSSL=false&serverTimezone=UTC
spring.datasource.username=quartz
spring.datasource.password=quartz
# 配置 Quartz 作业类
spring.quartz.job.class=com.example.Job
# 配置 Quartz 作业调度器
spring.quartz.job.properties.jobName=myJob
spring.quartz.job.properties.group=myGroup
spring.quartz.job.properties.cron=0/5 * * * * *
spring.quartz.job.properties.jobDataMap=@{}

接下来,创建一个继承自 QuartzJob 的作业类,并实现 execute 方法,例如:

@Component
public class Job implements QuartzJob {@Overridepublic void execute(JobExecutionContext context) {// 作业执行逻辑}
}

最后,在 Spring Boot 的启动类上添加 @EnableScheduling 注解,例如:

@SpringBootApplication
@EnableScheduling
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
  1. xxl-job
    xxl-job 集成 Spring Boot 需要将 xxl-job 作为一个 Spring Boot 启动器引入。首先在 Maven 项目的 pom.xml 文件中添加 xxl-job 的依赖:
<dependency><groupId>com.xxl-job</groupId><artifactId>xxl-job-spring-boot-starter</artifactId><version>2.3.0</version>
</dependency>

然后在 Spring Boot 项目的 application.properties 文件中添加相关的配置,例如:

# 配置 xxl-job 调度器
spring.xxl.job.admin.address=localhost:8080
spring.xxl.job.core.executor.type=simple
spring.xxl.job.core.job.coalesce=true
spring.xxl.job.core.job.spring.cron=0/5 * * * * *
spring.xxl.job.core.job.spring.name=myJob
spring.xxl.job.core.job.spring.group=myGroup
spring.xxl.job.core.job.spring.timeout=30000

接下来,创建一个继承自 AbstractJob 的作业类,并实现 execute 方法,例如:

@Component
public class Job extends AbstractJob {@Overrideprotected void executeInternal(JobExecutionContext context) {// 作业执行逻辑}
}

最后,在 Spring Boot 的启动类上添加 @EnableXxlJob 注解,例如:

@SpringBootApplication
@EnableXxlJob
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
  1. elastic-job
    elastic-job 集成 Spring Boot 需要将 elastic-job 作为一个 Spring Boot 启动器引入。首先在 Maven 项目的 pom.xml 文件中添加 elastic-job 的依赖:
<dependency><groupId>org.apache.shiro</groupId><artifactId>elastic-job-lite-core</artifactId><version>2.1.5</version>
</dependency>

然后在 Spring Boot 项目的 application.properties 文件中添加相关的配置,例如:

# 配置 ElasticJob 数据源
spring.datasource.url=jdbc:mysql://localhost:3306/elastic_job_db?useSSL=false&serverTimezone=UTC
spring.datasource.username=elastic_job
spring.datasource.password=elastic_job
# 配置 ElasticJob 作业类
spring.elasticjob.job.class=com.example.Job
spring.elasticjob.job.name=myJob
spring.elasticjob.job.group=myGroup
spring.elasticjob.job.cron=0/5 * * * * *
spring.elasticjob.job.timeout=30000

接下来,创建一个继承自 ElasticJob 的作业类,并实现 execute 方法,例如:

@Component
public class Job implements ElasticJob {@Overridepublic void execute(JobExecutionContext context) {// 作业执行逻辑}
}

最后,在 Spring Boot 的启动类上添加 @EnableElasticJob 注解,例如:

@SpringBootApplication
@EnableElasticJob
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
  1. Cron
    Cron 集成 Spring Boot 非常简单,只需要在 Spring Boot 项目的 application.properties 文件中添加相关的配置,例如:
# 配置 Cron 数据源
spring.datasource.url=jdbc:mysql://localhost:3306/cron_db?useSSL=false&serverTimezone=UTC
spring.datasource.username=cron
spring.datasource.password=cron
# 配置 Cron 作业类
spring.cron.job.class=com.example.Job
# 配置 Cron 作业调度器
spring.cron.job.spring.cron=0/5 * * * * *
spring.cron.job.spring.name=myJob
spring.cron.job.spring.group=myGroup

接下来,创建一个继承自 CronJob 的作业类,并实现 execute 方法,例如:

@Component
public class Job implements CronJob {@Overridepublic void execute(JobExecutionContext context) {// 作业执行逻辑}
}

最后,在 Spring Boot 的启动类上添加 @EnableScheduling 注解,例如:

@SpringBootApplication
@EnableScheduling
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

以上就是 Quartz、xxl-job、elastic-job、Cron 四个定时任务框架如何集成到 Spring Boot 的详细介绍,每个框架都有相应的使用方法和注意事项,可以根据实际需求选择合适的框架进行使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/239522.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全栈冲刺 之 一天速成MySQL

一、为什么使用数据库 数据储存在哪里&#xff1f; 硬盘、网盘、U盘、光盘、内存&#xff08;临时存储&#xff09; 数据持久化 使用文件来进行存储&#xff0c;数据库也是一种文件&#xff0c;像excel &#xff0c;xml 这些都可以进行数据的存储&#xff0c;但大量数据操作…

视频集中存储/磁盘阵列EasyCVR平台黑名单异常解决步骤是什么?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

UVA11729 Commando War

UVA11729 Commando War 题面翻译 突击战 你有n个部下&#xff0c;每个部下需要完成一项任务。第i个部下需要你花Bj分钟交代任务&#xff0c;然后他就会立刻独立地、无间断地执行Ji分钟后完成任务。你需要选择交代任务的顺序&#xff0c;使得所有任务尽早执行完毕&#xff08…

高压功率放大器的应用领域有哪些

高压功率放大器是一种特殊的电子设备&#xff0c;用于放大低电压信号到较高的功率水平。它在许多应用领域中发挥着重要作用。下面西安安泰将详细介绍高压功率放大器的几个常见应用领域。 声学领域&#xff1a;高压功率放大器在声学领域中广泛应用。例如&#xff0c;在音响系统和…

基于STM32 + TIM _定时器的基本机构和工作原理详解

前言 本篇博客主要学习了解定时器的基本结构和工作原理&#xff0c;掌握定时器的驱动程序和设计。本篇博客大部分是自己收集和整理&#xff0c;如有侵权请联系我删除。 本次博客板子使用的是正点原子精英版&#xff0c;芯片是STM32F103ZET6,需要资料可以我拿取。 本博客内容原…

短视频账号矩阵系统源码/saas独立源头技术开发

一、批量剪辑&#xff08;采用php语言&#xff0c;数学建模&#xff09; 短视频合成批量剪辑的算法主要有以下几种&#xff1a; 1. 帧间插值算法&#xff1a;通过对多个视频的帧进行插帧处理&#xff0c;从而合成一段平滑的短视频。 2. 特征提取算法&#xff1a;提取多个视频中…

FL Studio2024重磅更新 带你了解FL21.2最新版本功能

FL Studio2024是功能强大的音乐制作解决方案&#xff0c;使用旨在为用户提供一个友好完整的音乐创建环境&#xff0c;让您能够轻松创建、管理、编辑、混合具有专业品质的音乐&#xff0c;一切的一切都集中在一个软件中&#xff0c;只要您想&#xff0c;只要您需要&#xff0c;它…

2、RocketMQ源码分析(二)

RocketMQ的底层通信模块remoting remoting是RocketMQ的底层通信模块&#xff0c;RocketMQ底层通讯是使用Netty来实现的。本文通过对remoting源码进行分析&#xff0c;来说明remoting如何实现高性能通信的。 二、Remoting 通信模块结构 remoting 的网络通信是基于 Netty 实现&…

有两个篮子,分别为A 和 B,篮子A里装有鸡蛋,篮子B里装有苹 果,请用面向对象的思想实现两个篮子里的物品交换

问题&#xff1a; 有两个篮子&#xff0c;分别为A 和 B&#xff0c;篮子A里装有鸡蛋&#xff0c;篮子B里装有苹 果&#xff0c;请用面向对象的思想实现两个篮子里的物品交换 代码 package cn.ljh.algorithmic;/*** author JH*/ public class Demo07 {public static void main…

LangChain(0.0.340)官方文档三:Prompts上——自定义提示模板、使用实时特征或少量示例创建提示模板

文章目录 一、 Prompt templates1.1 langchain_core.prompts1.2 PromptTemplate1.2.1 简介1.2.2 ICEL1.2.3 Validate template 1.3 ChatPromptTemplate1.3.1 使用role创建1.3.2 使用MessagePromptTemplate创建1.3.3 自定义MessagePromptTemplate1.3.3.1 自定义消息角色名1.3.3.…

DCCK“启航计划“3+2第一课机器视觉导论

用相机代替人眼去获取图像&#xff0c;然后处理图像&#xff0c;给出指令。 如&#xff1a;相机获取可口可乐的液面高度图片&#xff0c;通过连接线床给图像处理程序&#xff0c;程序给出合格不合格的判断再执行后续操作 作用&#xff1a;机器不会疲劳&#xff0c;机器判断标准…

推荐3个完美替代 Navicat 的工具

现在企业&#xff0c;mysql数据库用的比较多&#xff0c;mysql数据库客户端的需求也就比较大&#xff0c;navicat就被大家所熟知。 这个工具&#xff0c;确实好用&#xff0c;功能也非常强大&#xff0c;但是&#xff0c;它的强大&#xff0c;是需要付费&#xff0c;或者用一些…