当前位置: 首页 > news >正文

XXL-Job的搭建接入Springboot项目(详细)

一、XXL-Job介绍

XXL-Job 是一款开源的分布式任务调度平台,由 Xuxueli(徐雪里)开发。它基于 Java 技术栈,提供了一套简单易用、高可靠性的任务调度解决方案。

XXL-Job 的主要作用是帮助开发者实现定时任务的调度和执行。它可以用于定时执行各种类型的任务,例如定时生成报表、定时发送邮件、定时清理数据等。通过 XXL-Job,开发者可以非常方便地管理和监控任务的执行情况,实现任务的自动化调度。

XXL-Job 提供了一个可视化的任务管理界面,可以进行任务的创建、编辑、删除和暂停等操作。同时,它还支持任务的分片并行执行,提高任务的处理效率。XXL-Job 还提供了丰富的任务调度配置选项,如定时触发、CRON 表达式、间隔触发等,满足不同任务调度需求。

除了任务调度功能,XXL-Job 还提供了任务日志记录和报警功能。它可以将任务的执行日志记录下来,方便排查问题和分析任务执行情况。同时,XXL-Job 还支持邮件、钉钉等方式的报警通知,及时告知任务执行异常或失败的情况。

总结来说,XXL-Job 是一款功能强大的分布式任务调度平台,可以帮助开发者实现定时任务的调度和执行。它提供了任务管理、任务调度配置、任务日志记录和报警等功能,方便开发者进行任务的管理和监控。

官网地址

分布式任务调度平台XXL-JOB

这个上面有关于xxl-job的详细介绍和各个功能说明。有需要的可自行去了解官方提供的文档。

系统架构图

调度中心作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。
执行器作用:负责接收“调度中心”的调度并执行。

二、下载xxl-job

1.环境准备

  • Maven3+
  • Jdk1.8+
  • Mysql5.7+

2.源码仓库地址

githup:

https://github.com/xuxueli/xxl-job

Gitee:

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

GitCode:

GitCode - 开发者的代码家园

3.中央仓库地址

目前最新的版本是2.4.1

    <!-- http://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ --><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>${最新稳定版本}</version></dependency>

三、快速入门

1.拉取代码

拉取下来的目录结构如下:

xxl-job-admin:调度中心
xxl-job-core:公共依赖
xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
    :xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;
    :xxl-job-executor-sample-frameless:无框架版本;

2.初始化调度数据库

将tables_xxl_job.sql文件导入到我们数据库中,表结构如下:

3.配置部署调度中心

调度中心项目:xxl-job-admin

作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台

 调度中心配置文件地址:

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

调度中心配置内容说明:

    ### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=root_pwdspring.datasource.driver-class-name=com.mysql.jdbc.Driver### 报警邮箱spring.mail.host=smtp.qq.comspring.mail.port=25spring.mail.username=xxx@qq.comspring.mail.password=xxxspring.mail.properties.mail.smtp.auth=truespring.mail.properties.mail.smtp.starttls.enable=truespring.mail.properties.mail.smtp.starttls.required=truespring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory### 调度中心通讯TOKEN [选填]:非空时启用;xxl.job.accessToken=### 调度中心国际化配置 [必填]: 默认为 "zh_CN"/中文简体, 可选范围为 "zh_CN"/中文简体, "zh_TC"/中文繁体 and "en"/英文;xxl.job.i18n=zh_CN## 调度线程池最大线程配置【必填】xxl.job.triggerpool.fast.max=200xxl.job.triggerpool.slow.max=100### 调度中心日志表数据保存天数 [必填]:过期日志自动清理;限制大于等于7时生效,否则, 如-1,关闭自动清理功能;xxl.job.logretentiondays=30

想让调度中心运行起来,最主要就是先配置好调度中心的JDBC的连接信息。

配置完成之后,尝试启动:调度中心(XxlJobAdminApplication)默认端口:8080,前缀是/xxl-job-admin

4.调度中心访问地址:http://localhost:8080/xxl-job-admin

初始账号密码:admin/123456

到此调度中心配置完成。

4.配置执行器项目

以xxl-job提供的整合springboot项目为例

步骤一:maven依赖

确认pom文件中引入了 “xxl-job-core” 的maven依赖;version可写具体的版本号

<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>${project.parent.version}</version></dependency>
步骤二:执行器配置

 springboot配置文件: /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/resources/application.properties

执行器配置,配置内容说明:

## 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-sample
### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=
### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30
步骤三:执行器组件配置

   执行器组件位置: /xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java

配置内容说明:组件配置类直接可用,需要和上面执行器配置文件application.properties中的配置路径需要保持一致

package com.xxl.job.executor.core.config;import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** xxl-job config** @author xuxueli 2017-04-28*/
@Configuration
public class XxlJobConfig {private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);@Value("${xxl.job.admin.addresses}")private String adminAddresses;@Value("${xxl.job.accessToken}")private String accessToken;@Value("${xxl.job.executor.appname}")private String appname;@Value("${xxl.job.executor.address}")private String address;@Value("${xxl.job.executor.ip}")private String ip;@Value("${xxl.job.executor.port}")private int port;@Value("${xxl.job.executor.logpath}")private String logPath;@Value("${xxl.job.executor.logretentiondays}")private int logRetentionDays;@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {logger.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appname);xxlJobSpringExecutor.setAddress(address);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}/*** 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;**      1、引入依赖:*          <dependency>*             <groupId>org.springframework.cloud</groupId>*             <artifactId>spring-cloud-commons</artifactId>*             <version>${version}</version>*         </dependency>**      2、配置文件,或者容器启动变量*          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'**      3、获取IP*          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();*/}
步骤四:启动执行器项目

举例:用xxl-job提供的先测试,启动:XxlJobExecutorApplication

四、开发第一个xxl-job任务

以xxl-job提供的springboot示例代码为例。

步骤一:新建执行器

这两个地方需要保持一致,不然自动注册的时候找到不到OnLine机器地址
错误信息是:RROR c.x.job.core.util.XxlJobRemotingUtil - Connection refused: connect

步骤二: 新建任务
1.运行模式BEAN

客户端:

2.代码端:

2.运行模式(GLUE)

 ( “GLUE模式(Java)” 运行模式的任务实际上是一段继承自IJobHandler的Java类代码,它在执行器项目中运行,可使用@Resource/@Autowire注入执行器里中的其他服务

这个就可以直接在xxl-job编写代码实现定时任务。

步骤三:手动执行

步骤四、查看日志

 请点击任务右侧 “日志” 按钮,可前往任务日志界面查看任务日志。

到此xxl-job提供给我们的代码结束。

五、整合spring boot项目

步骤一:引入依赖xxl-job

步骤二:执行器配置

配置我们自己springboot项目的 配置文件 application.xxxx

步骤三:执行器组件配置

可以将将示例的 XxlJobConfig copy到我们的项目中

@Configuration
@Slf4j
public class XxlJobConfig {@Value("${xxl.job.admin.addresses}")private String adminAddresses;@Value("${xxl.job.accessToken}")private String accessToken;@Value("${xxl.job.executor.appname}")private String appName;@Value("${xxl.job.executor.address}")private String address;@Value("${xxl.job.executor.ip}")private String ip;@Value("${xxl.job.executor.port}")private int port;@Value("${xxl.job.executor.logpath}")private String logPath;@Value("${xxl.job.executor.logretentiondays}")private int logRetentionDays;@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {log.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appName);xxlJobSpringExecutor.setAddress(address);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}
}

 步骤四:编写自己的调度任务

@Component
public class SampleXxlJob {@XxlJob(value = "test")public void myJob() {String jobParam = XxlJobHelper.getJobParam();System.out.println("myJob,任务调用成功,耶耶耶耶耶"+jobParam);XxlJobHelper.handleSuccess("调度任务成功");}
}

启动我们自己的springboot项目 。

  步骤五:客户端新建执行器

   步骤六:客户端新建任务

  步骤七:定时执行(一分钟一次)

  步骤七:查看日志

看日志输出,说明在自己的springboot项目中 xxl-job任务接入成功,之后就可以按需定义定时任务。xxl-job目前还有很多功能都还未演示,大家有需要可去xxl-job官网文档了解更多信息。

相关文章:

  • RTSP/Onvif安防视频云平台EasyNVR迁移盘符后启动异常的问题排查与解决
  • HashMap学习和线程安全的HashMap
  • 蓝桥杯每日一题----货物摆放
  • web架构师编辑器内容-编辑器组件图层面板功能开发-锁定隐藏、键盘事件功能的开发
  • 中级Python面试问题
  • 概率论与数理统计————3.随机变量及其分布
  • STM32F103标准外设库——中断应用/事件控制器(六)
  • 线性代数的学习和整理23:用EXCEL计算 向量/向量组的点乘 (内积) (建设ing)
  • 数据集成时表模型同步方法解析
  • postman后端测试时invalid token报错+token失效报错解决方案
  • 走迷宫(c语言)
  • Firefox 100 正式发布
  • 接口自动化测试持续集成,Soapui接口功能测试参数化
  • npm install 卡住不动的六种解决方法
  • Docker部署Traefik结合内网穿透远程访问Dashboard界面
  • [nginx文档翻译系列] 控制nginx
  • 【知识碎片】第三方登录弹窗效果
  • css布局,左右固定中间自适应实现
  • Java超时控制的实现
  • Laravel Mix运行时关于es2015报错解决方案
  • Leetcode 27 Remove Element
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PAT A1017 优先队列
  • 搭建gitbook 和 访问权限认证
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • #1015 : KMP算法
  • #HarmonyOS:基础语法
  • #微信小程序:微信小程序常见的配置传值
  • (1)虚拟机的安装与使用,linux系统安装
  • (C++20) consteval立即函数
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (十六)串口UART
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)基于IDEA的JAVA基础1
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net core 控制台应用程序读取配置文件app.config
  • .Net Core 中间件验签
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET Standard 的管理策略
  • .NET 发展历程
  • .Net 垃圾回收机制原理(二)
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .Net程序帮助文档制作
  • @Transactional 详解
  • [ C++ ] 继承
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [Android]使用Retrofit进行网络请求
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
  • [Google Guava] 1.1-使用和避免null
  • [J2ME]如何替换Google Map静态地图自带的Marker