CompletableFuture分批处理入库

/**
     * 思源数据入库
     * @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();
    }```

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值