/**
* 思源数据入库
* @param siyuanButlerList
*/
@Override
public void saveBatchSync(List<VwButlerlistPo> siyuanButlerList) {
Date date = new Date();
//新增数据赋值
siyuanButlerList.forEach(item->
{item.setRid(IdUtil.randomUUID());item.setCreatedTime(date);item.setUpdatedTime(date)
;item.setCreatedBy(USER);item.setUpdatedBy(USER);item.setDelStatus(0);}
);
log.info("入库的思源数据: {}",siyuanButlerList.size());
//lombda 将 siyuanButlerList 以1000个元素为一组
int batchSize = 200;
List<List<VwButlerlistPo>> siyuanGroupList = IntStream.range(0, siyuanButlerList.size()).boxed()
.collect(Collectors.groupingBy(index -> index / batchSize))//将索引按组分组
.values()
.stream()
.map(indices -> indices.stream()
.map(siyuanButlerList::get)//根据索引值获取VwButlerlistPo对象
.collect(Collectors.toList())//每组200个元素的列表
)
.collect(Collectors.toList());//所有分组列表
log.info("分批数据: {}",siyuanGroupList);
List<CompletableFuture<Void>> completableFutureList = new ArrayList<>();
int i =1;
for (List<VwButlerlistPo> vwButlerlistPoList : siyuanGroupList) {
int finalI = i;
completableFutureList.add(CompletableFuture.runAsync(() -> {
// 在这里处理每个批次的数据入库操作
log.info("开始处理第{}批数据,共{}批", finalI, siyuanGroupList.size());
// 调用保存数据的方法,传入当前批次的数据vwButlerlistPoList
int saveSize = vwButlerlistMapper.saveSiyuanBatch(vwButlerlistPoList);
log.info("第{}批数据处理完成,共插入{}条数据", finalI,saveSize);
}));
i++;
}
// 等待所有异步任务结束
CompletableFuture.allOf(completableFutureList.toArray(new CompletableFuture[]{})).join();
}```
CompletableFuture分批处理入库
最新推荐文章于 2024-07-19 17:37:28 发布