SpringBoot 项目整合xxl-job

一、简介

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。要想在SpringBoot 项目中接入到XXL-JOB中进行分布式定时任务处理,可以参考官方文档: https://www.xuxueli.com/xxl-job/

二、下载并部署调度中心

2.1 下载源码

gitee源码链接: http://gitee.com/xuxueli0323/xxl-job
源码的基本模块如下:

  • xxl-job-admin:调度中心
  • xxl-job-core:公共依赖
  • xxl-job-executor-samples:执行器Sample示例
2.2 初始化“调度数据库”

在项目源码目录获取 “调度数据库初始化SQL脚本” 并执行,调度中心支持集群部署,集群情况下各节点务必连接同一个mysql实例。如果mysql做主从,调度中心集群节点务必强制走主库。脚本位置:/xxl-job/doc/db/tables_xxl_job.sql。
在这里插入图片描述

2.3 配置“调度中心”

调度中心配置文件地址:/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/Shanghai
spring.datasource.username=root
spring.datasource.password=root_pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
### 报警邮箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.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=200
xxl.job.triggerpool.slow.max=100
### 调度中心日志表数据保存天数 [必填]:过期日志自动清理;限制大于等于7时生效,否则, 如-1,关闭自动清理功能;
xxl.job.logretentiondays=30
2.4 部署项目

如果已经正确进行上述配置,可将项目编译打包部署。
调度中心访问地址:http://localhost:8080/xxl-job-admin (该地址执行器将会使用到,作为回调地址)。默认登录账号: “admin/123456”, 登录后运行界面如下图所示。
在这里插入图片描述

三、改造要整合xxl-job的SpringBoot项目

3.1 引入xxl-job相关maven依赖

在项目的pom.xml文件中添加xxl-job-core依赖:

<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>${xxljob.version}</version>
</dependency>
3.2 配置调度中心地址

在项目的yaml配置文件中添加xxl-job相关配置信息:

xxl:job:accessToken: admin:# 调度中心服务地址addresses: http://localhost:8080/xxl-job-adminexecutor:# 执行器名称,必须唯一,与调度中心的执行器管理中的AppName保存一致appname: jobHandle#可空,读取物理网卡第一个IPip: # 调度通道监听端口,建议都在9900~9999之间port: 9998  # job执行的日志目录logpath: /home/mbApp/billbook/log/xxljob# 日志滚动天数  -1 不限制logretentiondays: -1
3.3 创建配置类

在项目中新建一个xxl-job的配置类,用于读取上述配置,并配置好执行器实例。

@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.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;@Bean()public XxlJobSpringExecutor xxlJobExecutor() {log.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setAppname(appname);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}
}
3.4 到调度中心新建执行器

进入到xxl-job的调度中心,选择执行器管理,点击新增按钮添加一个执行器,添加执行器时需要保证添加在执行器的AppName与上面yaml配置文件中的appname保持一致。
在这里插入图片描述

3.5 重启客户端项目

在xxl-job的调度中心创建完执行器后,重启客户端成功后,再次进入到xxl-job的调度中心的执行器管理页面查看刚刚新建的执行器是否是在线状态。当在线机器中有你的项目启动的ip时,说明你项目中配置的执行器已经接入到xxl-job的调度中心了,后续只需要新建任务使用这个执行器去执行就好。
在这里插入图片描述

3.6 新建任务

先进入xxl-job的调度中心的任务管理去新建一个任务,选择刚创建的执行器,运行模式选择BEAN,
JobHandler这里输入的要与客户端具体执行定时任务的handle名一致就好。
在这里插入图片描述

在到客户端项目中需要具体执行定时任务的方法上使用xxl的 @XxlJob注解来与调度中心刚新建的任务的JobHandler对应。这样就可以将这个处理定时任务的方法与调度中心的任务关联在一起。

@XxlJob("testJobHandler")
public void test() throws Exception {// 定时任务具体处理逻辑...log.info("XXL-JOB, 任务执行结束.");
}
3.7 启动任务

新建的任务初始状态是STOP的,需要进入调度中心的任务管理将需要执行的定时任务启动的,启动成功后,这个任务的状态会变成RUNNNG。后续就会根据你新建任务时配置的Corn表达式的规则进行定时执行客户端的任务处理的方法。

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

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

相关文章

【LeetCode】84. 柱状图中最大的矩形(困难)——代码随想录算法训练营Day60

题目链接&#xff1a;84. 柱状图中最大的矩形 题目描述 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,…

ChatGPT的安全风险控制

ChatGPT的安全风险控制涉及多个方面&#xff0c;旨在确保模型在使用过程中的数据安全和防止潜在风险。以下是一些关键的风险控制措施&#xff1a; 数据保护&#xff1a; 敏感数据脱敏&#xff1a;对于涉及个人隐私、商业机密等敏感信息&#xff0c;应进行脱敏处理&#xff0c;…

输入url后,触发的前端相关事件

在浏览器输入 URL 后&#xff0c;通常会触发以下一系列事件和操作&#xff1a; URL 解析&#xff1a;浏览器会解析用户输入的 URL&#xff0c;包括协议&#xff08;如 http:// 或 https://&#xff09;、主机名、端口号&#xff08;如果有&#xff09;、路径和查询参数等。 DN…

msfconsole数据库连接不了的问题【已解决】

msfconsole数据库连接 1.msf数据库端口 msf使用的是postgresql&#xff0c;这个数据库默认端口是5432 单个模块的使用可以不需要数据库&#xff0c;但是模块与模块之间需要沟通的时候就会用到数据库。 2.查看msf数据库连接状态 db_status #msf内部查看systemctl status p…

HTML视频笔记

学习arm开发板&#xff0c;涉及到网页HTML PHP什么的&#xff0c;简单看个视频学习下 HTML&#xff5c;超简单HTML入门教程 https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element ​​​​​​vscode需要的libc6等需要的版本高​​​​​​ 为了安装vscode&#xff0c;将…

Spring Cloud Alibaba微服务从入门到进阶(四)(服务发现-Nacos )

Nacos是服务发现组件和配置服务器 作为服务发现注册组件Nacos Server 搭建Nacos Server 下载、启动 访问nacos,默认 用户/密码 nacos/nacos 将应用注册到nacos 加依赖 在SpringCloud子项目中&#xff0c;Feign是属于OpenFeign&#xff0c;Sentinel、Nacos是属于alibaba的&…

FX110网:1月美国零售货币资金环比上升2.61%,嘉盛环比上升1.86%

美国商品期货交易委员会&#xff08;CFTC&#xff09;发布的最新月度报告显示&#xff0c;2024年1月零售货币存款与上月相比上升2.61%。 这份报告涵盖在美国运营的注册零售货币对交易商&#xff08;RFED&#xff09;和经纪自营商。包括嘉信理财&#xff08;CHARLES SCHWAB Futu…

【安装mysql】centos7 安装mysql

文章目录 1.卸载不用的环境2.获取mysql官方yum源3.开始安装4.常规登录4.1方法一&#xff1a;【博主可以】4.2方法二&#xff1a;直接用client登录4.3方法三&#xff1a;修改配置文件 5.设置配置文件5.1配置my .cnf5.2开机自启动 1.卸载不用的环境 查看有无mysql/mariadb ps ax…

python--类与面向对象-3

1、类的名称空间和对象的名称空间。&#xff08;Namespace&#xff09; &#xff08;1&#xff09;创建一个类就会产生一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 &#xff08;2&#xff09;创建一个对象就会创建一个对象的名称空间,存放着对象的名字…

天地图全国幼儿园数据下载与处理分析

概述 在看天地图服务资源的时候看到有个“幼儿园”的数据&#xff0c;好奇点开看了下&#xff0c;下载下来数据差看了下&#xff0c;数据质量还不错。本篇文章给大家分享一下这个数据的处理以及一些简单的统计分析结果。 数据下载 通过地址https://service.tianditu.gov.cn/…

嵌入式方向还有希望吗?

我刚开始学习&#xff0c;也不知道我定位的是单片机工程师&#xff0c;嵌入式工程师职位的。 我只知道电子工程师&#xff0c;这个职位其实偏硬件&#xff0c;很多岗位需求是硬件设计&#xff0c;PCB设计&#xff0c;还要懂焊接、各种仪器仪表使用&#xff0c;还有些需要懂单片…

Git提交代码进入coding

安装Git后建一个文件在文件里右键点击Git Bash使用命令配置用户名和邮箱git config --global user.name "你的用户名"和git config --global user.email "你的邮箱"命令git init来初始化&#xff0c;自动将当前仓库设置为master创建一个项目&#xff08;一…

C#操作像素替换图片中的指定颜色

待处理的图片&#xff0c;其特征是包含有限数量颜色&#xff0c;不同的颜色相互交叉使用&#xff0c;相同颜色并未完全连贯&#xff0c;需要将图片中的指定颜色替换为另一颜色。虽然很多图片处理工具都支持类似操作&#xff0c;最后还是自己动手编写简单的处理程序。   程序的…

【 TypeScript 】对TypeScript中类的理解?应用场景?

1. 是什么 类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础 类是一种用户定义的引用数据类型&#xff0c;也称类类型 传统的面向对象语言基本都是基于类的&#xff0c;JavaScript基于原型的方式让开发者多了很多理解成本在ES6之后&#xff0…

C++ 生成随机数 srand 和 time 函数

C 生成随机数&#xff0c;通常采用 srand 和 time 函数来设置随机数种子。 一、 srand 函数&#xff1a; srand 函数用于设置伪随机数生成器的种子。伪随机数生成器是一个算法&#xff0c;它根据特定的种子生成看似随机的数值序列。在每次程序运行时&#xff0c;如果使用相同…

4种小众的能力,帮你更好地适应未来

新年伊始&#xff0c;又是一个全新的开始。 未来的社会究竟需要什么样的能力&#xff1f;这已经是一个很老的话题&#xff0c;已经有许许多多讨论了。但这其中&#xff0c;可能有一些是容易被人忽略的&#xff0c;或者不容易被注意到的。 我想跟你一起分享&#xff0c;我对这个…

python面向对象练习3

第一题 这是一个电商网站的库存管理问题&#xff0c;我们需要管理商品的库存信息。每个商品都有商品编号、名称和库存数量。 商品编号 商品名称 数量1 手机 102 电视 53 耳机 20现在有一个用户购买了商品编号为1的商品5件&#xff0c;需…

前端代码整洁与规范之CSS篇

一、代码整洁 1. 命名规范 CSS 类名的命名应该简洁清晰&#xff0c;能够准确描述元素的作用。避免使用无意义的名称&#xff0c;例如“a”、“b”等&#xff0c;而应该使用有意义的英文单词或单词缩写。同时&#xff0c;也要避免使用驼峰命名法和下划线命名法混杂使用&#x…

十大经典排序之选择排序

文章目录 概要整体架构流程代码实现小结 概要 选择排序是一种简单直观的排序算法&#xff0c;无论什么数据进去都是 O(n) 的时间复杂度。所以用到它的时候&#xff0c;数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。 整体架构流程 首先在未排序序列中找到…

NAND闪存市场格局或将发生变化

随着供应商有效减产&#xff0c;内存价格开始反弹&#xff0c;半导体内存市场终于呈现复苏迹象。从市场动态和需求变化来看&#xff0c;作为两大内存产品之一的NAND闪存正经历新一轮变革。 供应商不断采取行动&#xff0c;提高价格并调整产能利用率。自2023年第三季度以来&…