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

springboot集成分布式任务调度系统xxl-job(调度器和执行器)

一、部署xxl-job服务端

下载xxl-job源码

下载地址:
https://gitee.com/xuxueli0323/xxl-job

二、导入项目、创建xxl_job数据库、修改配置文件为自己的数据库

三、启动项目、访问首页

访问地址:
http://localhost:8080/xxl-job-admin/ 账号:admin 密码:123456

执行器管理

我们部署的是调度器管理平台,执行器就是我们实际开发的应用系统:比如:会员系统、订单系统、结算系统等等;执行器管理可以对每一个注册上来的执行器进行管理(编辑、删除执行器等)

任务管理

我们应用系统都会有自己特定的job任务:比如:会员系统定时拉取一些会员推送模板消息、短信消息;结算系统定时生成结算任务、报表等。任务管理可根据具体的执行器、job任务名称(JobHandler)、任务描述等进行筛选;可新增任务、启动任务、执行任务、查询调度日志,功能比较丰富。

用户管理

用户管理可根据角色(普通用户、管理员)进行管理:新增用户、删除用户

调度日志

在调度日志模块可查询我们执行任务时的具体情况,可根据具体的执行器、任务名称、执行状态进行筛选(成功、失败、进行中),对于进行中的任务可手动终止;调度备注列可查看调度详情,比如:我们的任务被调度到哪一台机器、调度的结果码、结果信息等等。

运行报表

运行报表是对调度平台中执行器数、任务数、调度次数、调度明细(成功、失败)数据的汇总统计。

四、新建结算系统执行器【仅仅是个demo案例】

看到此处,想必大家心中对xxl-job已经有了一些初步的了解和感受,摩拳擦掌,趁热打铁,下面我们新建一个结算系统应用,注册到调度平台,并新建一个月结任务,测试下吧。

引入xxl-job调度器依赖

<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.3.1</version>
</dependency>

application.properties配置文件新增xxl-job配置

#xxljob config
#调度器地址
xxl.job.admin.addresses = http://127.0.0.1:8080/xxl-job-admin
#鉴权用暂无
xxl.job.accessToken =
#执行器名称(就是我们的业务系统) 
xxl.job.executor.appname = settle-system
#执行器地址和ip,demo案例无需填写
xxl.job.executor.address =
xxl.job.executor.ip =
#执行器端口:默认值:9999
xxl.job.executor.port = 9999
#日志路径
xxl.job.executor.logpath = D:\\tmp\\log
#日志清理时间
xxl.job.executor.logretentiondays = 30

执行器配置类(XxlJobConfig.java):

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.beans.factory.annotation.Value;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.context.annotation.Configuration;@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;}

编写结算系统-月结job任务(
MonthlySettlementJobHandler.java)

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.xxl.job.core.handler.annotation.XxlJob;@Component
public class MonthlySettlementJobHandler {private static Logger logger = LoggerFactory.getLogger(MonthlySettlementJobHandler.class);// 使用@XxlJob注解,将monthlySettlementJobHandler任务注册到调度平台@XxlJob("monthlySettlementJobHandler")public void monthlySettlementJobHandler(String param) throws InterruptedException {try {logger.info("结算系统-月结任务执行 参数: {}", param);} catch (Exception e) {logger.error("结算系统-月结任务执行 异常 参数: {} 异常信息: ", param, e);}}
}

结算系统执行器代码编写完毕,启动成功后,就需要去调度器管理平台新建我们的执行器、以及我们的job任务了。

在调度平台新建结算系统执行器

AppName:对应我们的配置:xxl.job.executor.appname = settle-system

名称:根据实际情况填写(结算系统)

注册方式:选择自动注册就可以了,结算系统在启动的时候,会自动向调度平台注册

机器地址:注册方式选择手动录入时才需要填写,此处我们无需填写

新建完毕之后,在列表页面具体的执行器了,点击OnLine 机器地址,可查看执行器的ip和端口

在调度平台新建结算系统调度任务

执行器:选择结算系统

任务描述:结算系统-月结任务

负责人:根据实际情况填写

报警邮件:根据实际情况填写

调度类型:选择CRON

Cron:填写Cron表达式:0 0 3 * * ? (每日凌晨3.00执行一次)

运行模式:Bean

JobHandler:就是我们编写的月结job任务代码中@XxlJob注解指定的名称:
monthlySettlementJobHandler

任务参数:根据实际情况填写,此demo案例没有使用参数

路由策略:策略较多,此处我们选择第一个

子任务ID:暂未

调度过期策略:忽略

阻塞处理策略:根据实际情况填写,此处我们选择单机串行

任务超时时间:单位:秒,根据实际情况填写,此处是3秒

失败重试次数:根据实际情况填写,此处我们选择不重试:0

执行结算系统-月结任务

点击:操作--》执行一次--》根据实际情况填写job参数--》机器地址无需填写

执行后,去结算系统查看日志,会有相应业务日志输出

再回到调度平台,点击:操作--》查询日志--》可看到调度时间、调度结果等等

四、总结

从调度平台部署、到业务应用系统(结算系统)对接调度平台、编写月结job任务,总体流程大家应该都比较清晰了,是不是觉得还挺简单的

相关文章:

springboot集成分布式任务调度系统xxl-job(调度器和执行器)

一、部署xxl-job服务端 下载xxl-job源码 下载地址&#xff1a; https://gitee.com/xuxueli0323/xxl-job 二、导入项目、创建xxl_job数据库、修改配置文件为自己的数据库 三、启动项目、访问首页 访问地址&#xff1a; http://localhost:8080/xxl-job-admin/ 账号&#xff1…...

11_Vue3中的新的组件

1. Fragment 在Vue2中&#xff1a;组件必须要有一个跟标签在Vue3中&#xff1a;组件可以没有根标签&#xff0c;内部会将多个标签包含在一个Fragment虚拟元素中好处&#xff1a;减少标签层级&#xff0c;减少内存占用 2. Teleport 什么是Teleport?——Teleport 是一种能够将…...

详解推送Git分支时发生的 cannot lock ref 错误

在码云上建了一个项目仓库,分支模型使用 git-flow ,并在本地新建了一个功能分支 feature/feature-poll。后来在推送时发生错误,提示 cannot lock ref ...... 这样的错误信息。下面复盘一下具体过程和解决办法,以供参考。 在码云中建立仓库时,考虑到想按照 GitFlow 的模式…...

[国产MCU]-BL602开发实例-PWM

PWM 文章目录 PWM1、BL602的PWM介绍2、PWM驱动API介绍3、PWM使用示例脉冲宽度调制(Pulse width modulation,简称PWM)是一种模拟控制方式,根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳定电源输出的改变。这种方…...

【JMeter】 使用Synchronizing Timer设置请求集合点,实现绝对并发

目录 布局设置说明 Number of Simulated Users to Group Timeout in milliseconds 使用时需要注意的点 集合点作用域 实际运行 资料获取方法 布局设置说明 参数说明&#xff1a; Number of Simulated Users to Group 每次释放的线程数量。如果设置为0&#xff0c;等同…...

无法对watchdog.sys等系统文件删除,弯道修复,这里解决办法很简单

右击360强力删除...

ClickHouse(九):Clickhouse表引擎 - Log系列表引擎

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…...

3.1 计算机网络和网络设备

数据参考&#xff1a;CISP官方 目录 计算机网络基础网络互联设备网络传输介质 一、计算机网络基础 1、ENIAC&#xff1a;世界上第一台计算机的诞生 1946年2月14日&#xff0c;宾夕法尼亚大学诞生了世界上第一台计算机&#xff0c;名为电子数字积分计算机&#xff08;ENIAC…...

值得中国人民大学与加拿大女王大学金融硕士中的金融人观看的五部电影

积金累玉的机会每个人都会把握&#xff0c;那么学习可以实现&#xff0c;生活娱乐一样可以。当电影遇见金融会产生怎样的化学变化呢&#xff1f;今天我们就带着这样的疑问来一起走进英国时报发布的经典电影&#xff0c;也是最值得中国人民大学与加拿大女王大学金融硕士中的金融…...

【数据库】Redis可以替代Mysql吗

Redis和Mysql的搭配 Redis可以替代Mysql吗什么是RedisRedis适用的场景以及优点Redis的缺点 什么是MysqlMysql的优点Mysql缺点 总结 Redis可以替代Mysql吗 Redis不能代替MySQL&#xff0c; Redis和MySQL只能是一种互补。 什么是Redis Redis是一种非关系型数据库&#xff0c;也…...

5 指针与多维数组:多维数组在内存中的存储与指针的关系

推荐最近在工作学习用的一款好用的智能助手AIRight 网址是www.airight.fun。 指针与多维数组&#xff1a;多维数组在内存中的存储与指针的关系 引言 多维数组是数据结构中常见且重要的概念&#xff0c;它是由多个一维数组组成的数据集合。在计算机内存中&#xff0c;多维数组…...

Spring 创建 Bean 的三种方式

在使用 Spring 框架后&#xff0c;对象以 Bean 的形式统一交给 IOC 容器去创建和管理。现阶段主流的方式是基于 SpringBoot 框架&#xff0c;基于注解的方式实现 Bean 的创建&#xff0c;但在原生 Spring 框架中其实存在三种创建 Bean 的方式。 一、基础类 BeanProcess 实体类…...

软工导论知识框架(五)面向对象方法学

传统软件工程方法学适用于中小型软件产品开发&#xff1b; 面向对象软件工程方法学适用于大型软件产品开发。 一.四要素 对象&#xff0b;类&#xff0b;继承&#xff0b;传递消息实现通信 二.概念 1.对象&#xff1a;具有相同状态的一组操作的集合&#xff0c;对状态和操作…...

MyBatisPlus代码生成器

首先需要mybaits-plus依赖和自动代码生成器依赖 <!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version></dependency><!-…...

文件传输软件常见问题解决办法大全

文件传输软件是我们工作中不可缺少的一种工具&#xff0c;它可以帮助我们快速、安全、稳定地传输各种文件&#xff0c;如文档、图片、视频等。但是在使用文件传输软件的过程中&#xff0c;我们也可能会遇到一些问题&#xff0c;影响我们的工作效率和传输质量。那么&#xff0c;…...

springboot工程测试临时数据修改技巧

目录 properties临时属性测试注入 args临时参数测试注入 bean配置类属性注入&#xff08;Import&#xff09; SpringBootTest是一个注解&#xff0c;用于测试Spring Boot应用程序。它可用于指示Spring Boot测试应用程序的启动点&#xff0c;并为测试提供一个可用的Spring应用…...

Echarts 清空画布空白以及鼠标悬浮提示信息格式化问题

清空画布用clear()会导致图表空白 const option1 = this.myEchart1.getOption()const option2 = this.myEchart2.getOption()const option3 = this.myEchart3.getOption()// 清空数据option1.series = []option1.xAxis[0].data = []option2.series = []option2.xAxis[0].data …...

数据结构入门:栈

目录 前言 1. 栈 1.1栈的概念及结构 1.2 栈的实现 1.2.1 栈的定义 1.2.2 栈的初始化 1.2.3 入栈 1.2.4 出栈 1.2.5 栈的元素个数 1.2.6 栈顶数据 1.2.7 栈的判空 2.栈的应用 2.1 题目一&#xff1a;括号匹配 2.1.1 思路 2.1.2 分析 2.1.3 题解 总结 前言 无论你是计算机科学专…...

《UNUX环境高级编程》(14)高级I/O

1、引言 2、 非阻塞I/O 系统调用分为两类&#xff1a;低速系统调用和其他系统调用。低速系统调用是可能会使进程永远阻塞的一类系统调用&#xff0c;包括&#xff1a; 如果某些文件类型&#xff08;如读管道、终端设备和网络设备&#xff09;的数据并不存在&#xff0c;读操作…...

第5讲:如何构建类的方法

【分享成果&#xff0c;随喜正能量】在这个社会上&#xff0c;对别人好一点&#xff0c;多站在别人的角度考虑&#xff0c;不要为小事争执&#xff0c;不要取笑他人&#xff0c;不要在别人背后嚼舌根&#xff0c;更不能逼人太甚。凡事退一步&#xff0c;对你有好处。。 《VBA中…...

力扣面试150题--除法求值

Day 62 题目描述 做法 此题本质是一个图论问题&#xff0c;对于两个字母相除是否存在值&#xff0c;其实就是判断&#xff0c;从一个字母能否通过其他字母到达&#xff0c;做法如下&#xff1a; 遍历所有等式&#xff0c;为每个变量分配唯一的整数索引。初始化一个二维数组 …...

人工智能赋能高中学科教学的应用与前景研究

一、引言 1.1 研究背景 在科技飞速发展的当下&#xff0c;人工智能&#xff08;Artificial Intelligence&#xff0c;简称 AI&#xff09;已成为全球瞩目的关键技术领域&#xff0c;深刻地改变着人们的生活、工作和学习方式。从智能家居设备到智能交通系统&#xff0c;从医疗…...

[Harmony]网络状态监听

权限 在module.json5中添加必要权限&#xff1a; // 声明应用需要请求的权限列表 "requestPermissions": [{"name": "ohos.permission.GET_NETWORK_INFO", // 网络信息权限"reason": "$string:network_info_reason","…...

金融系统渗透测试

金融系统渗透测试是保障金融机构网络安全的核心环节&#xff0c;它的核心目标是通过模拟攻击手段主动发现系统漏洞&#xff0c;防范数据泄露、资金盗取等重大风险。 一、金融系统渗透测试的核心框架 合规性驱动 需严格遵循《网络安全法》《数据安全法》及金融行业监管要求&am…...

Vue-Todo-list 案例

一、前言 在前端开发中&#xff0c;Todo List&#xff08;待办事项列表&#xff09; 是一个非常经典的入门项目。它涵盖了组件化思想、数据绑定、事件处理、本地存储等核心知识点&#xff0c;非常适合用来练习 Vue 的基本用法。 本文将带你一步步实现一个功能完整的 Vue Todo…...

SAP 在 AI 与数据统一平台上的战略转向

在 2025 年 SAP Sapphire 大会上&#xff0c;SAP 展示了其最新的产品战略和技术整合方向&#xff0c;与以往不同的是&#xff0c;今年的讨论更加务实、聚焦客户实际需求。SAP 强调&#xff0c;ERP 的转型不再是“一刀切”或破坏性的&#xff0c;而是可以根据客户现状&#xff0…...

chili3d 笔记17 c++ 编译hlr 带隐藏线工程图

这个要注册不然emscripten编译不起来 --------------- 行不通 ---------------- 结构体 using LineSegment std::pair<gp_Pnt, gp_Pnt>;using LineSegmentList std::vector<LineSegment>; EMSCRIPTEN_BINDINGS(Shape_Projection) {value_object<LineSegment&g…...

VSCode - VSCode 放大与缩小代码

VSCode 放大与缩小代码 1、放大 点击顶部菜单栏【查看】 -> 点击外观 -> 点击【放大】 或者&#xff0c;使用快捷键&#xff1a;Ctrl # 操作方式先按住 Ctrl 键&#xff0c;再按 键2、缩小 点击顶部菜单栏【查看】 -> 点击外观 -> 点击【缩小】 或者&#x…...

buuctf——web刷题第二页

[网鼎杯 2018]Fakebook和[SWPU2019]Web1没有&#xff0c;共30题 目录 [BSidesCF 2020]Had a bad day [网鼎杯 2020 朱雀组]phpweb [BJDCTF2020]The mystery of ip [BUUCTF 2018]Online Tool [GXYCTF2019]禁止套娃 [GWCTF 2019]我有一个数据库 [CISCN2019 华北赛区 Day2…...

电子电路基础2(杂乱)

电容器 容抗 滤波电路&#xff08;半波&#xff09; 全波整流 因为A点的电压比D点的电压高&#xff0c;所以D点会走向C点 电感基础 什么是电感器&#xff1f; 一种把电能转换成磁能&#xff0c;并可以将磁能存储起来的元器件。 在嵌入式开发中&#xff0c;电感主要用于动态能量…...