java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Springboot xxl-job动态传参

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

作者: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如何动态传参?

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

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

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

例如,在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字符串,并在执行器代码中解析这个字符串。

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

您可能感兴趣的文章:
阅读全文