xxljob总结
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 传入任务方法。
以上示例覆盖了日常开发中最常用的任务类型,可根据实际业务场景(如定时对账、数据同步)调整逻辑。