xxljob总结

发布于:2025-08-04 ⋅ 阅读:(13) ⋅ 点赞:(0)

XXL-Job 支持多种任务类型,以下是常见任务类型的示例 Demo,包含核心配置和代码片段,帮助快速理解用法:
 
一、Bean模式任务(最常用)
 
通过注解  @XxlJob  定义任务方法,直接在 Spring 容器中管理,适合 Java 项目。
 
1. 配置步骤
 
- 依赖引入(Maven):
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.3.0</version> <!-- 最新版本 -->
</dependency>
 
- 任务代码:
@Component
public class DemoJobHandler {

    // 任务名称:对应 XXL-Job 控制台配置的 "JobHandler" 字段
    @XxlJob("demoBeanJob")
    public ReturnT<String> demoBeanJob(String param) throws Exception {
        XxlJobLogger.log("Bean模式任务执行,参数:{}", param);

        // 业务逻辑:例如简单打印
        System.out.println("执行Bean任务,时间:" + new Date());

        return ReturnT.SUCCESS; // 成功标识
    }
}
 
- 控制台配置:
任务类型选择“BEAN”,JobHandler 填写  demoBeanJob ,其他参数(如定时规则)按需配置。
 
二、分片广播任务(分布式并行处理)
 
适合大数据量场景,将任务拆分为多个分片,由不同执行器并行处理。
 
1. 任务代码
 
@XxlJob("shardingJob")
public ReturnT<String> shardingJob(String param) throws Exception {
    // 获取分片信息:当前分片索引(0开始)、总分片数
    int shardIndex = XxlJobHelper.getShardIndex();
    int shardTotal = XxlJobHelper.getShardTotal();

    XxlJobLogger.log("分片任务执行:分片索引={}, 总分片数={}", shardIndex, shardTotal);

    // 业务逻辑:按分片处理数据(例如处理用户ID%shardTotal=shardIndex的数据)
    for (int userId = 1; userId <= 1000; userId++) {
        if (userId % shardTotal == shardIndex) {
            System.out.println("处理用户ID:" + userId);
        }
    }

    return ReturnT.SUCCESS;
}
 
 
- 控制台配置:
任务类型选择“BEAN”,JobHandler 填写  shardingJob ,并设置“分片总数”(如4),执行器会按分片数并行处理。
 
三、GLUE模式(Java)
 
任务代码直接在 XXL-Job 控制台编写(动态脚本),无需重启服务,适合简单逻辑或临时任务。
 
1. 控制台配置
 
- 任务类型选择“GLUE(Java)”,在“GLUE代码”编辑器中编写:
// 继承IJobHandler
public class GlueJobHandler extends IJobHandler {
    @Override
    public ReturnT<String> execute(String param) throws Exception {
        XxlJobLogger.log("GLUE模式任务执行,参数:{}", param);
        System.out.println("动态脚本执行,时间:" + new Date());
        return ReturnT.SUCCESS;
    }
}
 
- 保存后直接触发,代码实时生效。
 
四、命令行任务
 
执行系统命令(如脚本、程序),适合跨语言场景。
 
1. 控制台配置
 
- 任务类型选择“COMMAND”,“JobHandler”填写命令内容:
# 示例:执行shell脚本
/home/xxl-job/demo.sh "param1"
 
- 脚本内容( demo.sh ):
echo "命令行任务执行,参数:$1,时间:$(date)"
 
 
五、任务依赖示例
 
通过“子任务ID”配置任务依赖,实现“任务A执行完再执行任务B”。
 
1. 配置步骤
 
- 在任务B的“子任务ID”中填写任务A的ID(多个用逗号分隔)。
- 任务A代码:
@XxlJob("parentJob")
public ReturnT<String> parentJob(String param) {
    XxlJobLogger.log("父任务执行完成");
    return ReturnT.SUCCESS;
}
 
- 任务B代码:
@XxlJob("childJob")
public ReturnT<String> childJob(String param) {
    XxlJobLogger.log("子任务执行(依赖父任务完成)");
    return ReturnT.SUCCESS;
}
 
 
关键说明
 
- 日志查看:通过  XxlJobLogger.log()  输出的日志,可在 XXL-Job 控制台“任务日志”中查看。
- 失败处理:任务返回  ReturnT.FAIL  时,控制台会标记失败,可配置重试次数。
- 参数传递:控制台配置的“执行参数”会作为  param  传入任务方法。
 
以上示例覆盖了日常开发中最常用的任务类型,可根据实际业务场景(如定时对账、数据同步)调整逻辑。

 


网站公告

今日签到

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