前言
在一个业务中,需要将数据库的一张日志表导出到excel中做统计分析归类,由于单表的数据量特别大,发现在最终导出excel的时候,由于数量太大,导出速度特别慢,想了一些办法,不管使用何种API,单线程始终是操作的瓶颈,因此最终考虑使用多线程进行改善
总体思路:
1、数据总量分段
2、每个线程处理不同分段的数据
3、提交线程池
下面来看具体的代码,为测试方便,这里直接使用一个测试接口进行调用,
1、控制器
/**
* 导出系统日志信息-V2测试
*
* @return
*/
@GetMapping("/log-export/v2")
@ApiOperation(value = "导出系统日志信息V2", notes = "导出系统日志信息V2", produces = "application/json")
public void exportSysLogV2(@RequestParam(name = "userName", required = false) String userName,
@RequestParam(name = "startDate", required = false) String startDate,
@RequestParam(name = "endDate", required = false) String endDate,
针对大量数据导出Excel速度慢的问题,本文介绍了使用Java多线程来提高导出效率的方法。通过数据分段、多线程处理和线程池提交,显著提升了导出速度。具体实现包括控制器、业务实现类以及相关的工具类如XSSFWorkbookWrapper、WriteDataUtils、WritePOIUtils和TitlesColumns。实测5000多条数据仅用2秒,对比单线程有明显优势。
订阅专栏 解锁全文
1845





