下载地址: https://www.xuxueli.com/xxl-job/
中文文档: http://www.xuxueli.com/xxl-job/#/.
xxl-job控制台:
1、将下载好的源码zip包解压,获取初始化sql文件(xxl-job->doc->db->tables_xxl_job.sql),并执行
2、修改xxl-job-admin控制台项目下的application.perperties文件中的数据库链接信息
3、启动xxl-job-admin服务,访问http://localhost:8080/xxl-job-admin/toLogin,
进入xxljob的登录页面,账号默认admin,密码默认123456
4、新增任务执行器: 任务执行器->新增执行器
AppName:执行器集群的唯一标示, 和项目配置参数保持一致
注册方式:
自动注册:调度中心通过底层注册表可以动态发现并加载执行器地址(http://127.0.0.1:9999);
手动录入:人工手动录入执行器的地址信息,多地址逗号分隔;
5、新增任务: 任务管理->新增
路由策略:从开发角度看,主要分广播和非广播模式(单机)
Cron:触发任务执行的Cron表达式;
BEAN运行模式:任务以JobHandler方式维护在执行器端;
需要结合 “@XxlJob(“umHandler”)” 属性匹配执行器中任务;
JobHandler:运行模式为 “BEAN模式” 时生效,对应执行器中新开发的@XxlJob(“umHandler”)
方法“@XxlJob”注解自定义的value值;
阻塞处理策略:
调度任务请求执行时,发现执行器存在运行中的任务
1、将此次请求放入先进先出的FIFO队列,此策略为单机串行(默认)
2、将此次请求丢弃并标记为失败,此策略为丢弃后续调度
3、终止运行中的调度任务并清空队列,然后运行当前调度任务,此策略为覆盖之前调度
子任务:当前主任务成功执行完毕后自动触发
执行参数:任务所需参数,多个参数用逗号分隔,任务执行时将会把多个参数转换成数组传入
常用路由策略对应开发代码示例
分片广播(通过分片参数进行多服务器分段处理) :
@Component
public class SampleXxlJob {
@XxlJob("shardingJobHandler")
public ReturnT shardingJobHandler(String param) throws Exception {
// 分片参数
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
XxlJobLogger.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardingVO.getIndex(), shardingVO.getTotal());
// 业务逻辑
for (int i = 0; i < shardingVO.getTotal(); i++) {
if (i == shardingVO.getIndex()) {
XxlJobLogger.log("第 {} 片, 命中分片开始处理", i);
} else {
XxlJobLogger.log("第 {} 片, 忽略", i);
}
}
return ReturnT.SUCCESS;
}
}
非分片模式(单机):(第一个、最后一个、轮询、随机、最不经常使用、故障转移等等)
@Component
public class SampleXxlJob {
@XxlJob("demoJobHandler")
public ReturnT demoJobHandler(String param) throws Exception {
XxlJobLogger.log("XXL-JOB, Hello World.");
for (int i = 0; i < 5; i++) {
XxlJobLogger.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2);
}
return ReturnT.SUCCESS;
}
}