SpringBoot集成xxl-job实现超牛的定时任务

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
———官网

开始介绍xxl-job的使用前我们先认识一下它的作者:Xuxueli(许雪里 )

Xuxueli(许雪里 )是中国知名的开源社区贡献者和技术专家。他是XXL-Job的创始人和核心开发者,也是XXL-Job的主要维护者。他在分布式任务调度领域有着丰富的经验和深厚的技术功底。可以看到xxl-job是一个优秀的国产货!

其实市面上有很多类似的产品:

产品名称国产/国外开源/商业主要特点链接
XXL-Job国产开源简单易用、分布式支持、可视化监控、扩展性强、活跃的社区支持
Quartz国外开源灵活的调度配置、支持集群部署、可靠的任务调度、广泛应用
Airflow国外开源基于DAG的任务调度、可视化工作流编排、丰富的调度功能、社区活跃
Azkaban国外开源分布式任务调度、可视化工作流编排、易于使用、支持多种调度方式
TAC国产商业分布式任务调度、高可靠性、高性能、可视化监控、企业级支持
Elastic Job国产开源分布式任务调度、弹性扩展、高可靠性、支持多种任务类型、与Elasticsearch、Zookeeper等集成Elastic-Job的快速入门,三分钟带你体验分布式定时任务。接私活/工作必备-SpringBoot+Elastic-Job的快速启动Demo

包括之前博主讲的 Elastic Job

文章目录

    • 第一步,下载官方的仓库
    • 第二步,连接mysql
    • 第三步,连接本地的mysql库
    • 第四步,启动xxl-job-admin项目
      • 访问xxl-job的控制台
    • 第五步,启动执行器项目
      • 直接使用官方的项目即可
      • 更改注册中心(xxl-job-admin项目)地址
    • 第六步,执行定时任务
    • 第七步,自定义xxl-job服务
      • xxl-job-admin(注册中心)
      • xxl-job-executor(执行器)

废话不多说,现在我们来开始把xxl-job集成到SpringBoot(SpringCloud)中。

第一步,下载官方的仓库

没错,你没看错,是把他的仓库克隆下来,和其他的框架不同(在项目中引入jar包即可)

git clone https://gitee.com/xuxueli0323/xxl-job.git

gitee地址:https://gitee.com/xuxueli0323/xxl-job/tree/master

1

之后用idea打开是这样的

在这里插入图片描述

第二步,连接mysql

xxl-job存储的介质是mysql,所以我们需要执行一下sql文件来创建一个库。找到官方的sql文件

/xxl-job/doc/db/tables_xxl_job.sql

在这里插入图片描述

在我们本地的mysql直接执行,执行之后会得到一个名字叫xxl-job的库

在这里插入图片描述

这里一共八个表,他们的作用是:

  1. xxl_job_user表:该表用于存储用户信息,包括用户的登录名、密码、角色等。用于用户的身份认证和权限管理。

  2. xxl_job_logglue表:该表用于存储任务的日志关联信息,包括任务的执行日志ID、任务的日志时间等。用于关联任务的执行日志和日志文件。

  3. xxl_job_group表:该表用于存储任务分组信息,包括分组的名称、排序等。用于对任务进行分组管理,方便任务的分类和查找。

  4. xxl_job_info表:该表用于存储任务的基本信息,包括任务名称、任务分组、任务描述、任务执行类、任务参数等。每个任务在该表中都有一条记录。

  5. xxl_job_log表:该表用于存储任务的执行日志,包括任务的执行结果、执行时间、执行耗时、执行日志等。每次任务执行完成后,会在该表中插入一条记录。

  6. xxl_job_log_report表:该表用于存储任务的执行报表,包括任务的执行统计信息,如成功次数、失败次数、触发次数、调度时间等。每次任务执行完成后,会在该表中插入或更新一条记录。

  7. xxl_job_registry表:该表用于存储任务执行器的注册信息,包括执行器的地址、端口、心跳时间等。每个执行器在该表中都有一条记录,用于任务的分配和调度。

  8. xxl_job_lock表:该表用于存储任务的分布式锁信息,用于控制任务在分布式环境下的并发执行。每个任务在该表中都有一条记录,用于任务的加锁和解锁。

第三步,连接本地的mysql库

配置文件的地址是

/xxl-job/xxl-job-admin/src/main/resources/application.properties

这里面我们直接填写本地的数据库信息。

在这里插入图片描述

第四步,启动xxl-job-admin项目

配置好本地的mysql环境之后,选择好项目的jdk

在这里插入图片描述

之后我们启动启动类

com.xxl.job.admin.XxlJobAdminApplication

在这里插入图片描述

控制台打印如下信息则说明我们启动完成了

在这里插入图片描述

访问xxl-job的控制台

http://localhost:8080/xxl-job-admin/toLogin
默认的用户密码是 admin、123456

在这里插入图片描述

第五步,启动执行器项目

执行器(Executor)是指用于执行具体任务的运行时组件。执行器负责接收任务调度中心分配的任务,并按照任务的配置进行执行。可以理解为xxl-job-admin项目是一个注册中心,而执行器项目就是我们的执行者,注册中心负责管理统筹我们具体的任务,而任务里面具体做了什么事情就是执行器项目里面的业务了。

直接使用官方的项目即可

官方的仓库里面也给了我们一个执行器示例项目,叫做xxl-job-executor-sample-springboot

在这里插入图片描述

我们也执行启动类即可,如下则启动成功

在这里插入图片描述

这个时候我们去访问我们的控制台页面即可看到我们的执行器项目已经成功注册进来了

在这里插入图片描述

更改注册中心(xxl-job-admin项目)地址

我们可以看到这里的配置文件可以直接更改注册中心的地址

xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties

在这里插入图片描述

第六步,执行定时任务

通过在任务执行类的方法上添加@XxlJob注解,可以将该方法标记为一个定时任务。注解中可以设置任务的名称、分组、CRON表达式等属性,以及任务的参数和路由策略等。

使用项目中的示例任务

com.xxl.job.executor.service.jobhandler.SampleXxlJob#demoJobHandler

在这里插入图片描述

使用控制台调用任务

在这里插入图片描述

之后可以看到代码里面对应的信息被打印到日志中(示例任务是这样的,实际根据你的业务写代码就可以了)

在这里插入图片描述
在这里插入图片描述

第七步,自定义xxl-job服务

xxl-job-admin(注册中心)

在实际的工作过程中,必不能直接这样使用,就拿我们公司来说,我们使用的是微服务的架构,我们会把xxl-job-admin项目封装成一个微服务(当然不注册到nacos中)。这里直接用Maven打包成一个jar包

在这里插入图片描述

会在和项目同级别的目录下出现一个jar包

在这里插入图片描述

即可通过java命令运行

在这里插入图片描述

xxl-job-executor(执行器)

之后我们使用具体服务的微服务里面的节点(业务包,例如用户中心)指定xxl-job-admin项目的地址里面去使用。如果使用自定义的执行器要保证引入以下jar包

		 <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>${project.parent.version}</version></dependency>

就如示例项目中一样

在这里插入图片描述

直接运行执行器即可注入到xxl-job-admin(注册中心)里面去,最后我们在控制台统一管理我们的任务即可:

在这里插入图片描述

通过本文的介绍,我们了解了如何在Spring Boot项目中集成XXL-Job,实现超牛的定时任务。XXL-Job提供了强大的任务调度和管理功能,使得定时任务的开发和管理变得更加简单和高效。

集成XXL-Job,我们可以通过配置或注解的方式定义定时任务,并灵活地设置任务的调度规则和执行方式。无论是按照时间间隔还是时间点执行任务,XXL-Job都能满足我们的需求。同时,XXL-Job还提供了任务的监控和管理功能,让我们可以实时了解任务的执行情况和结果。

通过使用XXL-Job,我们可以轻松实现定时任务的自动化执行,提高系统的稳定性和可靠性。无论是在企业级应用中还是个人项目中,XXL-Job都能为我们带来便利和效益。

XXL-Job作为一款国产的优秀开源软件,提供了强大的任务调度和管理功能,完全能够媲美甚至超越国外同类产品。作为国产软件的使用者和推广者,我们应该积极拥抱国产软件,为其发展壮大贡献自己的力量。让我们携手努力,为国内软件行业的发展做出更大的贡献(没收许雪里的钱)!

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

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

相关文章

Linux进程程序替换

一、单进程下的程序替换 使用execl进行程序替换&#xff0c;先执行execl前面的代码&#xff0c;在execl处替换成其它进程的代码和数据继续执行&#xff0c;后面的内容就不执行了&#xff0c;因此只打印before 二、程序替换原理 前面我们fork创建子进程&#xff0c;子进程会继承…

一文弄懂Linux信号机制

目录 1.什么是信号&#xff1f; 2.信号实现原理 ​3.信号生命周期 4.信号分类 5.信号常见概念 6.信号阻塞和信号忽略的区别&#xff1f; 1.什么是信号&#xff1f; Linux信号机制是进程间通信的一种方式&#xff0c;用于在不同进程之间传递信息。它通过向目标进程发送一…

SQL Server Management Studio (SSMS)的安装教程

文章目录 SQL Server Management Studio (SSMS)的安装教程从Microsoft官网下载SQL Server Management Studio安装程序。选中安装程序右键并选择“以管理员的身份运行”选项选择安装目录&#xff0c;单击“安装”按钮开始安装过程安装成功界面安装完成后&#xff0c;您可以启动S…

微信小程序 - 页面继承(非完美解决方案)

微信小程序 - 面页继承&#xff08;非完美解决方案&#xff09; 废话思路首页 indexindex.jsindex.jsonindex.wxml 父页面 page-basepage-base.jspage-base.wxml 子页面 page-apage-a.jspage-a.wxml 子页面 page-bpage-b.jspage-b.wxml 其它app.jsapp.jsonapp.wxss 参考资料 废…

QT通过url下载http地址下的文件(文件夹)

前言 之前只写过通过http协议通信&#xff0c;没有写过下载http地址中的文件或者文件夹&#xff0c;了解一下在QT下如何下载。 其实很简单&#xff0c;同使用协议通信相同的是&#xff0c;创建QNetworkAccessManager和QNetworkRequest&#xff0c;设置QNetworkRequest的url&a…

地球系统模式(CESM)详解

目前通用地球系统模式&#xff08;Community Earth System Model&#xff0c;CESM&#xff09;在研究地球的过去、现在和未来的气候状况中具有越来越普遍的应用。CESM由美国NCAR于2010年07月推出以来&#xff0c;一直受到气候学界的密切关注。近年升级的CESM2.0在大气、陆地、海…

[ poi-表格导出 ] java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader

解决报错&#xff1a; org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader 报错描述&#xff1a; 表格导出本来使用正常&#xff0c;偶然就报了以上错误…

一个方法,教你快速监测蓄电池!

随着电力需求的不断增长和可再生能源的快速发展&#xff0c;蓄电池技术已经成为能源存储领域的重要组成部分。 蓄电池不仅在家庭和工业应用中发挥着重要作用&#xff0c;还在电网稳定性和可持续能源集成方面具有关键地位。然而&#xff0c;蓄电池的有效监控和管理对于确保其可靠…

2011-2021年“第四期”数字普惠金融与上市公司匹配(根据城市匹配)/上市公司数字普惠金融指数匹配数据

2011-2021年“第四期”数字普惠金融与上市公司匹配&#xff08;根据城市匹配&#xff09;/上市公司数字普惠金融指数匹配数据 1、时间&#xff1a;2011-2021年 指标&#xff1a;指标&#xff1a;股票代码、年份、行政区划代码、行业名称、行业代码、所属省份、所属城市、数字…

Android开发知识学习——Kotlin进阶

文章目录 次级构造主构造器init 代码块构造属性data class相等性解构Elvis 操作符when 操作符operatorLambdainfix 函数嵌套函数注解使用处目标函数简化函数参数默认值扩展函数类型内联函数部分禁用用内联具体化的类型参数抽象属性委托属性委托类委托 Kotlin 标准函数课后题 次…

【深度学习】【NLP】如何得到一个分词器,如何训练自定义分词器:从基础到实践

文章目录 什么是分词&#xff1f;分词算法使用Python训练分词器步骤1&#xff1a;选择分词算法步骤2&#xff1a;准备训练语料步骤3&#xff1a;配置分词器参数步骤4&#xff1a;训练分词器步骤5&#xff1a;测试和使用分词器 代码示例&#xff1a;使用SentencePiece训练分词器…

塞尔帕替尼的靶点以及疗效【医游记】

&#xff08;图片来源于网络&#xff09; 塞尔帕替尼&#xff08;Selpercatinib&#xff09;是一种高选择性和抑制活性的小分子RET&#xff08;受体酪氨酸激酶&#xff09;抑制剂。它是全球首个获批的高选择性RET抑制剂&#xff0c;用于治疗RET融合阳性的转移性非小细胞肺癌的…

前端 读取/导入 Excel文档

情况&#xff1a; 需要通过Excel表&#xff0c;将数据导入到数据库&#xff0c;但是后台人员出差了&#xff0c;我又只会PHP&#xff0c;没用过node&#xff0c;所以只能前端导入Excel文件&#xff0c;然后循环调用后台的单条添加接口了。 库&#xff1a; Excel.js&#xff08…

LeetCode 2401.最长优雅子数组 ----双指针+位运算

数据范围1e5 考虑nlog 或者n的解法&#xff0c;考虑双指针 因为这里要求的是一段连续的数组 想起我们的最长不重复连续子序列 然后结合一下位运算就好了 是一道双指针不错的题目 class Solution { public:int longestNiceSubarray(vector<int>& nums) {int n nums…

算法leetcode|86. 分隔链表(rust重拳出击)

文章目录 86. 分隔链表&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 86. 分隔链表&#xff1a; 给你一个链表的头节点 head 和一个特…

mybatis-plus 使用 mybatis-plus-join 增强多表关联查询能力

一、mybatis-plus-join mybatis-plus 原生的能力不支持多表关联&#xff0c;对于这种场景只能通过写SQL进行实现&#xff0c;而mybatis-plus-join 则是建立在 mybatis-plus 基础之上的扩展框架&#xff0c;可以在不影响原有能力之上通过简单的API即可实现多表关联能力而无需编…

OpenCV 画极线

from pylab import * import cv2from backend._gs_ import stereo_cameradef compute_epipole(F):""" 从基础矩阵 F 中计算右极点(可以使用 F.T 获得左极点)"""# 返回 F 的零空间(Fx0)U,S,V np.linalg.svd(F)e V[-1]return e/e[2]def plot_epi…

故障诊断模型 | Maltab实现BiLSTM双向长短期记忆神经网络故障诊断

文章目录 效果一览文章概述模型描述源码设计参考资料效果一览 文章概述 故障诊断模型 | Maltab实现BiLSTM双向长短期记忆神经网络故障诊断 模型描述 利用各种检查和测试方法,发现系统和设备是否存在故障的过程是故障检测;而进一步确定故障所在大致部位的过程是故障定位。故障…

RK3588编译MXNet框架

目录 1. 背景 2.编译MXNet准备 3.开发板编译 1. 背景 MXNet&#xff08;也称为Apache MXNet或incubator-mxnet&#xff09;是一个开源的深度学习框架&#xff0c;它最初由华为和亚马逊AWS共同开发&#xff0c;并于2017年成为Apache软件基金会的孵化项目。MXNet旨在提供高效、…

【ArcGIS】CSV表导入Arcgis时字段类型改变

一个小记录&#xff1a; 可以看见我的文件夹里不知道我怎么操作的&#xff0c;多出了一个【ini】结尾的文件。 里面显示&#xff0c;我的文件里对应的几列限定为text 这也是为什么我进行xy表转point操作时无法进行的原因 不管我怎么在 csv操作&#xff0c;修改列的单元格格式都…