Springboot整合xxl-job实现动态传参

 更新时间:2025年03月18日 09:53:29   作者:SoftwareDevOps  
XXL-JOB是一个分布式任务调度平台,本文主要介绍了Springboot整合xxl-job实现动态传参,具有一定的参考价值,感兴趣的可以了解一下

在做项目的时候,关于定时任务框架的首选,肯定是xxl-job,那么关于xxl-job你有多少了解呢?

1、什么是xxl-job?

一、基本组成

XXL-JOB主要由调度中心和执行器两部分组成:

调度中心:统一管理任务调度平台上的调度任务,负责触发调度执行,并且提供任务管理平台。它主要负责管理调度信息,按照调度配置发出调度请求,但自身不承担业务代码。
执行器:接收调度中心的调度并且执行,可以直接执行也可以集成到项目中。它负责接收调度请求并执行任务逻辑,包括执行请求、终止请求和日志请求等。

二、特点与优势

简单易用:XXL-JOB提供了友好的Web界面,支持通过Web界面进行任务的增删改查,同时也支持通过API接口进行任务管理。用户可以通过简单的操作完成任务的调度和管理。
动态管理:支持动态修改任务状态、启动/停止任务以及终止运行中任务,所有操作都会实时生效。
高可用性:调度中心和执行器都支持集群部署,可保证调度和执行的高可用性。即使某个节点出现故障,也能自动切换到其他节点继续执行任务。
弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务,实现弹性扩容缩容。
丰富的路由策略:执行器集群部署时提供多种路由策略,包括第一个、最后一个、轮询、随机、一致性HASH等,以满足不同场景下的需求。
故障转移:如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求,确保任务能够正常执行。
执行失败查看日志:对于执行失败的任务,可以查看详细的日志信息,方便用户进行问题排查和修复。
支持邮件报警:当任务执行失败时,XXL-JOB支持发送邮件通知相关人员,以便及时处理异常情况。

三、应用场景

XXL-JOB适用于各种需要定时执行任务或实时处理任务的场景,如:

定时发送邮件:通过XXL-JOB可以定时发送邮件通知相关人员。
定时生成报表:可以定时生成各类业务报表,供相关人员进行分析和决策。
定时清理数据:可以定时清理过期或无效的数据,确保数据库的整洁和高效运行。
实时数据采集:可以实时采集各类业务数据,并进行处理和分析。
实时消息推送:可以实时推送各类业务消息给用户或第三方系统。

四、与其他任务调度框架的比较

与Quartz等传统的任务调度框架相比,XXL-JOB具有以下优势:

学习成本低:XXL-JOB提供了可视化的Web界面和丰富的文档支持,降低了学习成本。
操作简便:通过Web界面可以方便地进行任务的创建、编辑、删除和查询等操作。
负载均衡:XXL-JOB通过执行器实现协同分配式运行任务,充分发挥集群优势,实现了负载均衡。

2、xxl-job如何动态传参?

  • 通过任务参数字段
    在XXL-JOB的任务管理界面,每个任务都有一个“任务参数”字段。你可以在这个字段中填写需要传递给执行器的参数。这些参数通常以JSON、键值对或其他格式编写,具体取决于你的执行器如何解析这些参数。

例如,你可以在“任务参数”字段中填写:

{
    "param1": "value1",
    "param2": "value2"
}

然后在执行器的任务处理逻辑中,通过某种方式(如Jackson库)解析这个JSON字符串,获取到具体的参数值。

  • 通过自定义参数传递
    XXL-JOB支持通过调度中心传递自定义参数给执行器。你可以在创建或编辑任务时,在“GLUE源码”或“Bean模式”下编写代码,通过XxlJobHelper.getXxlJobContext()获取到当前的任务上下文,然后从上下文中提取出自定义参数。

例如,在GLUE源码模式下,你可以这样编写代码:

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.xxl.job.core.logger.XxlJobLogger;
import com.xxl.job.core.util.XxlJobHelper;

import java.util.Map;

@XxlJob("demoJobHandler")
public class DemoJobHandler {

    @Override
    public ReturnT<String> execute(String param) throws Exception {
        // 获取任务上下文
        Map<String, Object> context = XxlJobHelper.getXxlJobContext().getCustomParam();
        
        // 从上下文中提取参数
        String customParam1 = (String) context.get("customParam1");
        String customParam2 = (String) context.get("customParam2");
        
        // 执行任务逻辑
        XxlJobLogger.log("customParam1: " + customParam1 + ", customParam2: " + customParam2);
        
        return ReturnT.SUCCESS;
    }
}

但是,请注意,上面的代码示例并不完全准确,因为XxlJobHelper.getXxlJobContext().getCustomParam()方法可能并不存在(具体取决于XXL-JOB的版本和你的配置)。实际上,你可能需要通过其他方式获取自定义参数,例如通过任务参数字段传递一个JSON字符串,并在执行器代码中解析这个字符串。

  • 通过全局参数配置
    XXL-JOB还支持全局参数配置,这些参数可以在调度中心的全局配置中设置,并在执行器启动时通过配置文件或命令行参数等方式传递给执行器。然而,这种方式通常用于传递一些不变的全局配置信息,而不是动态的任务参数。

  • 通过API接口传递
    如果你的应用场景需要更加灵活和动态的参数传递方式,你可以考虑通过API接口来触发任务,并在API请求中传递参数。XXL-JOB提供了RESTful API接口,你可以通过HTTP请求来触发任务,并在请求体中传递参数。

到此这篇关于Springboot整合xxl-job实现动态传参  的文章就介绍到这了,更多相关Springboot xxl-job动态传参  内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java排序去重示例分享

    java排序去重示例分享

    这篇文章主要介绍了java排序去重示例,对String strs = "ZZZ BBB AAA OOO ZZZ AAA ZZZ"计算出现个数,排序去重,需要的朋友可以参考下
    2014-02-02
  • Java 数据结构进阶二叉树题集上

    Java 数据结构进阶二叉树题集上

    二叉树可以简单理解为对于一个节点来说,最多拥有一个上级节点,同时最多具备左右两个下级节点的数据结构。本文将带你通过实际题目来熟练掌握
    2022-04-04
  • java实现word文档转pdf并添加水印的方法详解

    java实现word文档转pdf并添加水印的方法详解

    这篇文章主要介绍了java实现word文档转pdf并添加水印的方法,结合实例形式详细分析了java word文档转PDF相关实现技巧与操作注意事项,需要的朋友可以参考下
    2019-09-09
  • Java Lambda表达式实例解析原理

    Java Lambda表达式实例解析原理

    日常开发中,我们很多时候需要用到Java 8的Lambda表达式,它允许把函数作为一个方法的参数,让我们的代码更优雅、更简洁。所以整理了一波工作中常用的Lambda表达式。看完一定会有帮助的
    2023-03-03
  • 关于Spring Boot对jdbc的支持问题

    关于Spring Boot对jdbc的支持问题

    这篇文章主要介绍了关于Spring Boot对jdbc的支持问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Java实现JSON与XML相互转换的简明教程

    Java实现JSON与XML相互转换的简明教程

    Java实现复杂数据结构(如嵌套对象、数组)在 JSON 与 XML 之间的相互转换,可以使用 Jackson 和 Jackson XML 扩展库来完成,Jackson 是一个流行的 JSON 处理库,通过 Jackson 的 XML 扩展库,可以实现 JSON 和 XML 之间的转换,需要的朋友可以参考下
    2024-08-08
  • 解析Java中所有错误和异常的父类java.lang.Throwable

    解析Java中所有错误和异常的父类java.lang.Throwable

    这篇文章主要介绍了Java中所有错误和异常的父类java.lang.Throwable,文章中简单地分析了其源码,说明在代码注释中,需要的朋友可以参考下
    2016-03-03
  • SpringBoot-JWT生成Token和拦截器的使用(访问受限资源)

    SpringBoot-JWT生成Token和拦截器的使用(访问受限资源)

    本文主要介绍了SpringBoot-JWT生成Token和拦截器的使用(访问受限资源),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Mybatis批量插入数据返回主键的实现

    Mybatis批量插入数据返回主键的实现

    这篇文章主要介绍了Mybatis批量插入数据返回主键的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Java commons-httpclient如果实现get及post请求

    Java commons-httpclient如果实现get及post请求

    这篇文章主要介绍了Java commons-httpclient如果实现get及post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09

最新评论