若依框架整合XXL-JOB实现分布式任务调度

2025-06发布2次浏览

若依框架(RuoYi)是一个基于Spring Boot的快速开发平台,而XXL-JOB则是一款分布式任务调度平台。将两者整合可以为系统提供强大的任务调度能力,同时利用若依框架的便捷性,实现高效的任务管理。

以下是对如何在若依框架中整合XXL-JOB实现分布式任务调度的详细解析:


一、XXL-JOB简介

XXL-JOB是一款开源的分布式任务调度平台,支持任务分片、失败重试、定时调度等功能,适用于需要大规模任务调度的场景。其核心功能包括:

  • 任务分片:支持将一个任务拆分为多个子任务并行执行。
  • 分布式部署:支持多节点部署,提高任务处理能力。
  • 可视化管理:提供Web界面方便用户管理和监控任务。

二、若依框架简介

若依框架是一个基于Spring Boot和Spring Cloud的快速开发平台,提供了代码生成器、权限管理、日志记录等模块,适合用于快速构建企业级应用。通过整合XXL-JOB,可以进一步增强系统的任务调度能力。


三、整合步骤

1. 引入依赖

在若依项目的pom.xml文件中添加XXL-JOB的依赖:

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

确保版本与XXL-JOB服务器端一致。


2. 配置XXL-JOB

application.yml中配置XXL-JOB的相关参数:

xxl:
  job:
    admin:
      addresses: http://127.0.0.1:8080/xxl-job-admin # XXL-JOB管理端地址
    executor:
      appname: ruoyi-executor # 执行器名称
      ip: 
      port: 9999 # 执行器端口
      logpath: ./joblogs # 日志路径
      logretentiondays: 30 # 日志保留天数

3. 创建执行器

创建一个类实现IJobHandler接口,并注册到XXL-JOB中:

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;

@Component
public class MyJobHandler extends IJobHandler {

    @XxlJob("myJobHandler")
    @Override
    public ReturnT<String> execute(String param) throws Exception {
        System.out.println("任务执行中:" + param);
        return SUCCESS;
    }
}

上述代码定义了一个名为myJobHandler的任务处理器,任务执行时会打印参数信息。


4. 配置执行器启动

创建一个类实现ApplicationRunner接口,在应用启动时初始化XXL-JOB执行器:

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
public class XxlJobConfig implements CommandLineRunner {

    @Resource
    private org.springframework.core.env.Environment env;

    private XxlJobSpringExecutor xxlJobExecutor;

    @Autowired
    public XxlJobConfig(org.springframework.core.env.Environment env) {
        this.env = env;
    }

    @Override
    public void run(String... args) throws Exception {
        xxlJobExecutor = new XxlJobSpringExecutor();
        xxlJobExecutor.setAdminAddresses(env.getProperty("xxl.job.admin.addresses"));
        xxlJobExecutor.setAppname(env.getProperty("xxl.job.executor.appname"));
        xxlJobExecutor.setIp(env.getProperty("xxl.job.executor.ip"));
        xxlJobExecutor.setPort(Integer.valueOf(env.getProperty("xxl.job.executor.port")));
        xxlJobExecutor.setAccessToken(env.getProperty("xxl.job.accessToken"));
        xxlJobExecutor.setLogPath(env.getProperty("xxl.job.executor.logpath"));
        xxlJobExecutor.setLogRetentionDays(Integer.valueOf(env.getProperty("xxl.job.executor.logretentiondays")));

        xxlJobExecutor.start();
    }
}

5. 启动XXL-JOB管理端

下载XXL-JOB管理端并启动,默认访问地址为http://localhost:8080/xxl-job-admin。使用默认账号admin和密码123456登录后,添加执行器并配置任务。


四、任务分片示例

如果需要支持任务分片,可以通过ShardingContext获取分片参数:

import com.xxl.job.core.context.ShardingContext;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;

@Component
public class ShardingJobHandler {

    @XxlJob("shardingJobHandler")
    public void shardingJob(ShardingContext context) {
        int shardIndex = context.getShardIndex(); // 当前分片索引
        int shardTotal = context.getShardTotal(); // 总分片数
        String param = context.getParams(); // 参数

        System.out.println(String.format("分片任务执行中:当前分片索引=%d, 总分片数=%d, 参数=%s",
                shardIndex, shardTotal, param));
    }
}

五、流程图说明

以下是任务调度的整体流程图:

sequenceDiagram
    participant Admin as 管理端
    participant Executor as 执行器
    participant Task as 任务
    Admin->>Executor: 发起任务调度请求
    Executor->>Task: 分发任务到具体处理器
    Task-->>Executor: 返回任务执行结果
    Executor-->>Admin: 上报任务执行状态

六、总结

通过若依框架整合XXL-JOB,可以快速实现分布式任务调度功能。结合若依框架的权限管理、日志记录等功能,能够更高效地管理和监控任务执行情况。