Excel导出总结

业务

场景一:根据商品分类或品牌或商品属性查询出商品信息
场景二:根据商品分类或商品属性查询属性信息

查询分类时,需要查到最末级分类,也就是选择一级类目时,查询出二级类目、三级类目的数据,当选择二级类目时,则查询二级类目、三级类目数据,查询三级类目时,则查询三级数据,三级类目是最后一级类目

由于数据量很大,所以在导出时采用多线程查询db数据,一个线程负责写excel操作。
查询出db数据后,又要对数据进行单个查询处理,补齐数据对象,所以在循环时采用 stream 的 parallelStream 来处理,将结果添加到别一个集合时,注意要使用线程安全的list 例如:Collections.synchronizedList(new ArrayList<>(10));

流程图

在这里插入图片描述

通过有界阻塞对队FIFO,实现生产者和消费模式,队列满时,则生产者阻塞,队列为空时,消费者阻塞,查询db数据是多个线程,而写 excel 文件的一个sheet是一个线程(经测试 excel 在创建行时只能从上向下创建,当用多个线程在一个sheet里创建行并写数据时,会出现打开异常提示或数据出现空白,因为多线程创建行写数据时,可能后面的行已经创建了,但前面的行还没有创建,在excel中是不允许的,所在这里用单线程来创建行和写数据

项目地址

Excel 多线程导出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值