业务场景:
- 需要分布式定时任务
- 可能有多个分片(生产者)
- 每个分片生产总数据中的一部分数据
说明:
Elastic Job当前的分片索引最大值 = 分片总数 -1
代码示例:
public class DemoJob implements SimpleJob {
@Override
public void execute(ShardingContext shardingContext) {
List<User> allData = getAllDataFromDataBase();
// 获取当前分片索引
int shardingItem = shardingContext.getShardingItem();
// 获取当前分片总是
int totalShard = shardingContext.getShardingTotalCount() ;
List<User> result = new ArrayList<>();
for(User user : allData){
long id = user.getId();
// id与分片总数量进行取模运算,只要等于当前的分片索引值,就是需要处理的数据
if(id % totalShard != shardingItem){
continue;
}
result.add(user);
}
// result 是分片后,需要处理的数据
}
private List<User> getAllDataFromDataBase(){
// todo 从数据库获取数据
}
}
@Data
class User{
private Long id;
}