1 快速入门
1.1 API介绍
- 在调度中心创建任务的时候,选择路由策略为:
分片路由
- 如何获取分片信息
ShardingUtil.ShardingVO shardingVo = ShardingUtil.getShardingVo();
// 获取当前分片
int index = shardingVo.getIndex();
// 获取总分数量
int total = shardingVo.getTotal();
1.2 演示
在快速入门程序的基础上,增加一个job演示,xxljob的分片
- 提供一个job
package study.wyy.job.xxl.task;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import com.xxl.job.core.util.ShardingUtil;
/**
* @author wyaoyao
* @description
* @date 2021/1/6 13:25
*/
public class ShardDemoJob extends IJobHandler {
@Override
public ReturnT<String> execute(String param) throws Exception {
ShardingUtil.ShardingVO shardingVo = ShardingUtil.getShardingVo();
// 获取当前分片
int index = shardingVo.getIndex();
// 获取总分数量
int total = shardingVo.getTotal();
XxlJobLogger.log("current shard index is {}, total is {}",index,total);
return ReturnT.SUCCESS;
}
}
- 在执行器上注册这个job
// 之前的注册的快速入门任务
XxlJobExecutor.registJobHandler("demoJob",new DemoJob());
// 注册分片任务
XxlJobExecutor.registJobHandler("shardJob",new ShardDemoJob());
- 调度中心新建一个任务,注意选择分片策略为
分片路由
- 测试
- 启动我们之前入门程序的启动类
package study.wyy.job.xxl;
import com.xxl.job.core.executor.XxlJobExecutor;
import lombok.extern.slf4j.Slf4j;
import study.wyy.job.xxl.config.XxlJobConfig;
import java.util.concurrent.TimeUnit;
/**
* @author wyaoyao
* @description
* @date 2021/1/4 16:02
*/
@Slf4j
public class Client {
public static void main(String[] args) {
XxlJobConfig xxlJobConfig = new XxlJobConfig();
try {
xxlJobConfig.initXxlJobExecutor();
while (true) {
TimeUnit.HOURS.sleep(1);
}
}catch (Exception e){
log.error(e.getMessage(),e);
}finally {
xxlJobConfig.destroy();
}
}
}
此时启动的实例执行器的端口是之前我们配置的端口是9999
// 设置执行器的端口
xxlJobExecutor.setPort(9999);
现在修改为9998,利用idea再启动一份:
这样我们就有两个实例,执行器的端口分别是9999,9998
调度中心的执行器如果选择的是自动注册,那么就会自动发现这两个端口:
- 调度中心启动任务
观察执行日志:
current shard index is 0, total is 2
current shard index is 01, total is 2