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

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

第一步,下载官方的仓库

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

java 复制代码
git clone https://gitee.com/xuxueli0323/xxl-job.git

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

之后用idea打开是这样的

第二步,连接mysql

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

java 复制代码
/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库

配置文件的地址是

java 复制代码
/xxl-job/xxl-job-admin/src/main/resources/application.properties

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

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

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

之后我们启动启动类

java 复制代码
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项目)地址

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

java 复制代码
xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties

第六步,执行定时任务

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

使用项目中的示例任务

java 复制代码
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包

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

相关推荐
记得开心一点嘛8 分钟前
Nginx与Tomcat之间的关系
java·nginx·tomcat
凡人的AI工具箱10 分钟前
每天40分玩转Django:实操图片分享社区
数据库·人工智能·后端·python·django
界面开发小八哥20 分钟前
「Java EE开发指南」如何用MyEclipse构建一个Web项目?(一)
java·前端·ide·java-ee·myeclipse
王伯爵23 分钟前
<packaging>jar</packaging>和<packaging>pom</packaging>的区别
java·pycharm·jar
Q_19284999061 小时前
基于Spring Boot的个人健康管理系统
java·spring boot·后端
liutaiyi81 小时前
Redis可视化工具 RDM mac安装使用
redis·后端·macos
Q_19284999061 小时前
基于Springcloud的智能社区服务系统
后端·spring·spring cloud
xiaocaibao7771 小时前
Java语言的网络编程
开发语言·后端·golang
政采云技术1 小时前
Java反应式编程概述
后端
m0_748245172 小时前
Web第一次作业
java