SpringBoot 整合 xxl-job

news2024/11/18 12:26:40

文章目录

  • 部署 xxl-job
  • SpringBoot 配置
    • maven 配置
    • application.yaml
    • 配置 XxlJobConfig
    • XxlJobSpringExecutor
    • 新建执行任务
  • 配置 xxl-job-admin
    • 执行器管理
    • 任务管理

部署 xxl-job

K8S 部署 xxl-job 参考文档:https://blog.csdn.net/weixin_42555971/article/details/124894198

 

SpringBoot 配置

maven 配置

pom 文件添加依赖

<!--xxl-job依赖-->
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version>
</dependency>

 

application.yaml

添加参数

  • addresses:调度中心部署跟地址,如调度中心集群部署存在多个地址则用逗号分隔,执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调"
  • appname:执行器的名称,后面配置 xxl-job-admin 要用
  • ip:ip地址
  • port:对外暴露的端口号,注意,如果配置多个执行器时,防止端口冲突
  • logpath: 执行器运行日志文件存储的磁盘位置,需要对该路径拥有读写权限
  • logretentiondays: 执行器Log文件定期清理功能,指定日志保存天数,日志文件过期自动删除。限制至少保持3天,否则功能不生效;
  • accessToken:执行器通讯token[选填]:非空时启动
xxl:
  job:
    admin:
      addresses: http://192.168.140.1:8080/xxl-job-admin
    executor:
      appname: demo-feng-executor
      ip:
      port: 9997
      logpath: /home/applogs/xxl-job/jobhandler
      logretentiondays: -1
    accessToken:

 

配置 XxlJobConfig

  • 引入 application.yaml 配置的参数
  • 注册 XxlJobSpringExecutor
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;

@Configuration
public class XxlJobConfig {

    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @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.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appName);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }
}

 

XxlJobSpringExecutor

这里聊一下 XxlJobSpringExecutor,不想多了解的可以跳过

afterSingletonsInstantiated 函数

  • this.initJobHandlerMethodRepository(applicationContext):初始化 JobHandler,就是找到带有注解 @XxlJob 的 Job ,进行注册
  • GlueFactory.refreshInstance(1):刷新GlueFactory, 这里type 为 0/1,1 就是说明使用的是Spring 框架
  • super.start():调用父类start() 方法,核心逻辑
public void afterSingletonsInstantiated() {
    this.initJobHandlerMethodRepository(applicationContext);
    GlueFactory.refreshInstance(1);

    try {
        super.start();
    } catch (Exception var2) {
        throw new RuntimeException(var2);
    }
}

start 函数

  • initLogPath:初始化log路径,没有给定,默认是 /data/applogs/xxl-job/jobhandler
  • initAdminBizList:初始化 invoker, admin-client,这里就是给定的 admin server 端地址,一个或者多个,封装成 AdminBizClient 对象,放在adminBizList list里面,以便后面的回调、注册、移除等操作
  • JobLogFileCleanThread.getInstance().start:初始化 日志 清理线程,定时清理
  • TriggerCallbackThread.getInstance().start():初始化回调线程
  • initEmbedServer:初始化 executor-server
public void start() throws Exception {
     XxlJobFileAppender.initLogPath(this.logPath);
     this.initAdminBizList(this.adminAddresses, this.accessToken);
     JobLogFileCleanThread.getInstance().start((long)this.logRetentionDays);
     TriggerCallbackThread.getInstance().start();
     this.initEmbedServer(this.address, this.ip, this.port, this.appname, this.accessToken);
 }

 

新建执行任务

  • MyTask 为任务名
  • 注解 @XxlJob 会被 spring 找到,起名需要注意,后面配置 xxl-job-admin 要用到
  • 函数里可以自定义需要执行的内容
@Slf4j
@Component
public class MyTask {

    @XxlJob("fengDemoTask")
    private void task() {
        log.info("成功调用demo任务");
    }

}

 

配置 xxl-job-admin

执行器管理

点击 “新增”
在这里插入图片描述

  • appname:对应 application.yaml 配置的 xxl.job.executor.appname
  • 名称:自定义中文名,在任务管理会显示
  • 注册方式:建议使用手动
  • 机器地址:服务运行的 ip + 端口,端口为 application.yaml 配置的 xxl.job.executor.port
    在这里插入图片描述
     

任务管理

选择刚刚执行器,点击 “新增”

在这里插入图片描述

  • 任务描述:自定义
  • 负责人:自定义
  • 调度类型:建议选择 CRON
  • Cron:表达式参考文章,https://help.aliyun.com/document_detail/64769.html
  • 运行模式:BEAN
  • JobHandler:注解 @XxlJob 的名称
  • 路由策略:默认是第一个,如果配置了多个需要同时调度,可以选择分片广播
    在这里插入图片描述

编辑任务状态
在这里插入图片描述

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

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

相关文章

【Web开发】Python实现Web服务器(Docker下部署Flask)

&#x1f37a;基于Python的Web服务器系列相关文章编写如下&#x1f37a;&#xff1a; &#x1f388;【Web开发】Python实现Web服务器&#xff08;Flask快速入门&#xff09;&#x1f388;&#x1f388;【Web开发】Python实现Web服务器&#xff08;Flask案例测试&#xff09;&a…

分享112个PHP源码,总有一款适合您

PHP源码 分享112个PHP源码&#xff0c;总有一款适合您 链接&#xff1a;https://pan.baidu.com/s/1MaBtjYZk08o0eJT5_E79aQ?pwduldm 提取码&#xff1a;uldm 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载…

实战丨从0到1搭建结算平台

一、概述我们最开始分享了O2O电商支付清结算体系&#xff0c;接着分享了如何从0-1搭建计费体系&#xff0c;接下来我们分享&#xff1a;各方的钱算完之后怎么付出去&#xff0c;也即结算平台建设的实操与设计思路。1.什么是结算&#xff1f;说结算平台之前&#xff0c;先说一下…

22年 | 年前总结 | 主业谋生存,副业谋发展

22年关键词 复盘 | 极简 | 长期主义 | 阅读 | 斜杠青年 | 一事无成 | … 当然了&#xff0c;2023也会继续延续某些关键词。 一壶清酒&#xff0c;敬这红尘也敬我 很多人都在说&#xff0c;疫情存在的时间比任何一段恋情还要长。 而我想说&#xff0c;我失败的次数还超过了做…

Java设计模式中策略模式是怎么回事/怎么替代繁琐if-else语句/如何优化条件选择语句

继续整理记录这段时间来的收获&#xff0c;详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用&#xff01; 6.3 策略模式 6.3.1 概述 定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替代&#xff0c;且算法的变化不会影响使用算法的用户属…

【自学Python】Python注释

文章来源嗨客网&#xff08;www.haicoder.net&#xff09; Python注释 Python注释教程 用于注解说明解释程序的文字就是注释&#xff0c;注释提高了代码的阅读性。一旦程序中某部分内容被注释掉&#xff0c;则该内容将会被 Python 解释器忽略&#xff0c;换句话说&#xff0c…

一般颜色直方图

颜色直方图是一种用于图像处理和分析的图表&#xff0c;它可以显示图像中不同颜色的数量。通常&#xff0c;颜色直方图会将颜色分成几个色调区间&#xff0c;每个区间对应一个条形图&#xff0c;其中条形图的高度表示该色调区间中的像素数量。通过颜色直方图&#xff0c;你可以…

Mask RCNN网络源码解读(Ⅰ) --- 语义分割前言与转置卷积

目录 1.什么是语义分割 2.语义分割常见的数据集格式 3.常见的语义分割评价指标 4.转置卷积 1.什么是语义分割 常见分割任务&#xff1a;语义分割、实例分割、全景分割 图一 原始图片图二 语义分割图三 实例分割语义分割&#xff08;例如FCN网络&#xff09;可以理解为一个…

开发与项目经理之间的打情骂俏——数据库篇

&#x1f466;&#x1f466;一个帅气的boy&#xff0c;你可以叫我Love And Program &#x1f5b1; ⌨个人主页&#xff1a;Love And Program的个人主页 &#x1f496;&#x1f496;如果对你有帮助的话希望三连&#x1f4a8;&#x1f4a8;支持一下博主 由数据库引发的一系列探…

小论文写作指南(AI类)

参考b站沃恩智慧课程 论文结构 标题:不要太长或太短,抓住重点,简明扼要。 作者:你的作品一定力争一作,通讯作者是导师/大老板/出资人。 摘要Abstract:点明大背景(如为什么研究微表情识别,对社会有什么价值,拔高立意层次),阐述目标(我们提出模型为了在什么问题上达…

9个时间序列交叉验证方法的介绍和对比

评估性能对预测模型的开发至关重要。交叉验证是一种流行的技术。但是在处理时间序列时&#xff0c;应该确保交叉验证处理了数据的时间依赖性质。在之前的文章中&#xff0c;我们也做过相应的介绍。 在本文中&#xff0c;我们收集了时间序列的常用的9种交叉验证方法。这些包括样…

【博客578】LVS NAT配合MASQUERADE实现FULLNAT的场景,及此场景下net.ipv4.vs.conntrack参数的重要作用

LVS NAT配合MASQUERADE实现FULLNAT的场景&#xff0c;及此场景下net.ipv4.vs.conntrack参数的重要作用 1、LVS基本原理&#xff1a; 流程&#xff1a; 当用户向负载均衡调度器&#xff08;Director Server&#xff09;发起请求&#xff0c;调度器将请求发往至内核空间 PREROU…

第6章 线程通信

6.2.1 管道 管道是一个线性字节数组,类似文件,使用文件读写进行访问&#xff1b;在程序里面,创建管道需要使用popen()或者pipe(); 管道的一个重要特点是使用管道的两个线程之间必须存在某种关系, 例如,使用popen需要提供另一端进程的文件名,使用pipe的两个线程分别隶属于父子进…

Linux常用命令——fgrep命令

在线Linux命令查询工具 fgrep 为文件搜索文字字符串 补充说明 fgrep命令是用来搜索 file 参数指定的输入文件&#xff08;缺省为标准输入&#xff09;中的匹配模式的行。fgrep 命令特别搜索 Pattern 参数&#xff0c;它们是固定的字符串。如果在 File 参数中指定一个以上的…

dp刷题(三)编辑距离(Hard)

编辑距离_牛客题霸_牛客网 描述 给定两个单词word1和word2&#xff0c;请计算将word1转换为word2至少需要多少步操作。 你可以对一个单词执行以下3种操作&#xff1a; a&#xff09;在单词中插入一个字符 b&#xff09;删除单词中的一个字符 c&#xff09;替换单词中的一个字…

C#,图像二值化(14)——全局阈值的最佳迭代算法(Iterate Thresholding)及源代码

1、图像二值化 图像二值化是将彩色图像转换为黑白图像。大多数计算机视觉应用程序将图片转换为二进制表示。图像越是未经处理&#xff0c;计算机就越容易解释其基本特征。 二值化过程 在计算机存储器中&#xff0c;所有文件通常以灰度级的形式存储&#xff0c;灰度级具有从0…

Vue基础入门小demo——记事本

文章目录 &#x1f4cb;前言 &#x1f3af;demo介绍 &#x1f3af;完整代码 &#x1f3af;最终效果 &#x1f3af;案例分析 &#x1f4cb;前言 记事本&#xff08;不是操作系统的那个记事本&#xff0c;是一个简单的网页版本记事本&#xff09;是一个较全面的Vue指令集合案…

迁移学习简要

什么是迁移学习 迁移学习是一种机器学习方法&#xff0c;就是把任务为A的开发模型作为其的初始点&#xff0c;重新使用在任务为B的开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务。虽然大多数机器学习的新 算法都是为了解决单个任务而设计的…

Exynos_4412——IIC控制器和MPU6050

目录 一、Exynos_4412下的IIC控制器 二、IIC寄存器 三、MPU6050原理 MPU6050 MPU6050的主要参数 MPU6050通信接口 MPU6050官方芯片手册 MPU6050寄存器 四、MPU6050寄存器读写时序 向MPU6050写一个字节数据 向MPU6050读一个字节数据 五、IIC编程 六、小项目 Exynos…

Linux内核中断子系统

查看中断控制相关的设备树节点 *********************gpiof控制器*************************pinctrl: pin-controller50002000 {#address-cells <1>;#size-cells <1>;compatible "st,stm32mp157-pinctrl";interrupt-parent <&exti>;gpiof…