xxl-job如何动态传参

发布于:2024-11-27 ⋅ 阅读:(78) ⋅ 点赞:(0)

在做项目的时候,关于定时任务框架的首选,肯定是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如何动态传参?

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

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

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

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

  1. 通过自定义参数传递
    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字符串,并在执行器代码中解析这个字符串。

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

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


网站公告

今日签到

点亮在社区的每一天
去签到