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任务,总体流程大家应该都比较清晰了,是不是觉得还挺简单的

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

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

相关文章

国产超低功耗32位MCU的应用

随着物联网技术的不断发展&#xff0c;超低功耗MCU已经成为了物联网方案中主要的芯片处理技术。超低功耗MCU具有众多的优点&#xff0c;其中一大所用就是能够大大提高物联网设备的续航能力&#xff0c;保证设备在长时间内不掉电不断电。那么&#xff0c;超低功耗MCU在物联网方案…

three.js修改内置材质着色器代码

通常我们是通过修改扩展three.js内置的材质来实现一些复杂的效果的&#xff0c;而不是使用shaderMaterial材质从零开始实现。比如说很满意MeshStandardMaterial&#xff08;一种常规材质&#xff09;的效果&#xff0c;但是我们希望在这个材质上添加一些顶点动画。如果我们打算…

手游联运平台的运营模式是什么?

手游联运平台的运营模式是指通过平台将多款手游进行联运和推广&#xff0c;从而实现游戏开发商、发行商和渠道方之间的合作与合力&#xff0c;共同推动游戏的发展与推广。具体来说&#xff0c;手游联运平台的运营模式主要包括以下几个方面&#xff1a; 游戏接入&#xff1a;手…

Python 程序设计入门(017)—— 选择结构程序设计

Python 程序设计入门&#xff08;017&#xff09;—— 选择结构程序设计 目录 Python 程序设计入门&#xff08;017&#xff09;—— 选择结构程序设计一、if 语句二、if…else 语句三、if…elif…else 语句四、多分支选择语句与字典相结合五、逻辑运算符 and六、逻辑运算符 or…

php webshell 免杀入门

webshell 查杀软件&#xff1a; d盾、安全狗、护卫神、Sangfor WebShellKill 在线查杀 百度WEBDIR https://scanner.baidu.com 河马 https://www.shellpub.com cloudwalker牧云 https://webshellchop.chaitin.cn 查杀技术 静态检测、动态检测、日志检查 静态检查&#xff1a…

【安卓串口通信】

安卓串口通信需要使用到串口适配器和USB OTG线。首先需要在Android设备上安装串口调试助手或其他支持串口通信的应用程序。然后将串口适配器连接到Android设备&#xff0c;使用USB OTG线连接即可。 接下来&#xff0c;您需要打开串口调试助手或其他应用程序&#xff0c…

研发工程师玩转Kubernetes——PVC使用storageClassName选择PV

除了《研发工程师玩转Kubernetes——PVC使用Label和storage选择PV》中介绍的使用Label做选择因子外&#xff0c;PVC还可以通过storageClassName选择符合条件的PV。 StorageClass的设计是用于描述如何动态创建PV。最开始时&#xff0c;管理员需要一次性申请好所有的PV&#xff0…

Cesium中通过射线计算日照

Cesium中通过射线计算日照 前段时间接触到一个需求&#xff0c;需要实时的计算建筑的日照&#xff0c;通常优先通过shadow map来实现。通过shadow map可以直接获取某一时刻的光照信息&#xff0c;累积不同太阳光位置的shadow map即可得到物体表面的光照时长。 不过本人技术有限…

SPINN:基于设备和云的神经网络协同递进推理

SPINN&#xff1a;基于设备和云的神经网络协同递进推理 论文标题&#xff1a;SPINN: synergistic progressive inference of neural networks over device and cloud 原文链接&#xff1a;https://dl.acm.org/doi/10.1145/3372224.3419194 论文动机 现代CNN过多的计算需求&am…

redis的缓存更新策略以及如何保证redis与数据库的数据一致性

redis的缓存更新策略有这么几种&#xff1a; 1、由应用直接和redis以及数据库相连接&#xff1a; 查询数据时&#xff0c;应用去redis中查询&#xff0c;查不到的话再由应用去数据库中查询&#xff0c;并将查询结果放在redis&#xff1b; 更新数据时&#xff…

在jupyter中下载数据集失败及解决方法(以IMDB为例)

在IMDB数据集下载时&#xff0c;由于网络原因下载失败&#xff0c;报错如下&#xff1a; Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/imdb.npz ConnectionResetError Traceback (most recent call last) … Exception: URL fetch f…

windos wsl2 docker unix:///var/run/docker.sock

解决方案 问题如下 rootDESKTOP-VM0J0I4:~# docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?启动下docker sudo service docker startcsdn 等风来不如迎风去 htp://t.csdn.cn/Gh365

将 Kwargs 传递给 Python 中的另一个函数

文章目录 Python 中的关键字参数在 Python 中使用**kwargs 调用函数使用 Python 将 kwargs 传递给另一个函数总结 Python 列出了可以传递给程序中的函数的两种类型的参数。 非关键字参数 (**args) 和关键字参数 (**kwargs)。 通常&#xff0c;python 函数必须使用正确数量的参…

electron、electron-forge 安装

npm修改了registry&#xff0c;安装依旧无效 使用cnpm 倒是可以解决&#xff0c;但是 npx electron-forge import 中 Installing dependencies 使用的是npm 给出一次性解决方案&#xff1a; step1&#xff1a;切换npm的下载源&#xff0c;可以使用nrm 进行管理&#xff0c;有…

华秋亮相2023世界汽车制造技术暨智能装备博览会,推动汽车产业快速发展

洞悉全球汽车产业格局&#xff0c;前瞻业界未来趋势。2023年7月27日-30日&#xff0c;时隔三年&#xff0c;重聚武汉国际博览中心&#xff0c;2023世界汽车制造技术暨智能装备博览会盛大开幕。深耕汽车行业多年的世界汽车制造技术暨智能装备博览会&#xff0c;掀起行业热点新高…

死磕Android性能优化,卡顿原因与优化方案

随着移动互联网的快速发展&#xff0c;Android应用的性能优化变得尤为重要。卡顿是用户体验中最常见的问题之一&#xff0c;它会导致应用的响应变慢、界面不流畅&#xff0c;甚至影响用户的使用体验。因此&#xff0c;我们需要深入了解卡顿问题的原因&#xff0c;并寻找相应的解…

Java中ArrayList常用方法的学习

Java中ArrayList常用方法的学习 需求分析代码实现小结Time 需求分析 ArrayList集合的常用方法学习 代码实现 java.util.ArrayList;/*** Author:LQ* Description:* Date:Created in 16:45 2023/8/9*/ public class ListTest {public static void main(String[] args) {ArrayLis…

WMS系列:层级树的surface 的创建

WMS 创建的surface 与 surfaceflinger 创建的Layer 是一一对应的&#xff0c;只不过可能是创建不同的 Layer 1. DefaultTaskDisplayArea 对应的surface 的创建 DefaultTaskDisplayArea 的调用栈如下&#xff0c;是在系统进程启动服务的时候&#xff0c;去创建对应的SurfaceCont…

Flutter:屏幕适配

flutter_screenutil flutter_screenutil是一个用于在Flutter应用程序中进行屏幕适配的工具包。它旨在帮助开发者在不同屏幕尺寸和密度的设备上创建响应式的UI布局。 flutter_screenutil提供了一些用于处理尺寸和间距的方法&#xff0c;使得开发者可以根据设备的屏幕尺寸和密度…

Segment Anything(SAM) 计算过程

给定输入图像 I ∈ R 3 H W I \in R^{3 \times H \times W} I∈R3HW。给定需要的prompts&#xff1a; M ∈ R 1 H W M \in R^{1 \times H \times W} M∈R1HW&#xff0c;代表图片的前背景信息。 P ∈ R N 2 P \in R^{N \times 2} P∈RN2&#xff0c;其中 N N N 是点的个数…