线程池导入大数据量excel

一、前置准备阶段:环境准备与参数配置

  1. 依赖引入pom.xml中添加 EasyExcel 和线程池相关依赖,确保版本兼容(easyexcel 建议 2.2.10+,避免避免池使用 Spring 自带的ThreadPoolTaskExecutor

  2. 线程池 参数定制化配置 针对 Excel 导入的 IO 密集型特性,配置线程池(核心线程数 = CPU 核心数 ×2,最大线程数 = CPU 核心数 ×4,队列容量 = 100),并通过@Configuration注入 Spring 容器

  3. 业务模型与 Excel 映射类定义创建与 Excel 列对应的实体类,通过 easyexcel 注解指定表头映射和数据转换规则(如日期格式化、字段校验)

二、文件上传与预处理

  1. 接收前端上传的文件 通过 SpringMVC 的MultipartFile接收 Excel 文件,保存到临时目录(如/tmp/excel-import/),并生成唯一任务 ID(用于后续进度查询)

  2. 文件合法性校验 校验文件格式(必须为.xlsx.xls)、大小(如不超过 100MB)、表头是否匹配(通过 easyexcel 的headRowNumber解析表头并对比预期字段)

三、任务拆分与分发

  1. 按文件 / Sheet 页拆分任务 主线程读取 Excel 的 Sheet 数量,为每个 Sheet 创建独立任务(若 Sheet 行数超过 5 万,进一步按 5 万行 / 片拆分),通过@Async注解提交到线程池

  2. 多任务并行调度 主线程收集所有子任务的CompletableFuture,通过CompletableFuture.allOf()等待所有任务完成,最终汇总结果

四、EasyExcel 流式解析与数据处理

  1. 自定义 ReadListener 处理解析逻辑 通过 easyexcel 的ReadListener逐行解析数据,实现 "读一行处理一行",避免内存堆积

  2. 启动 EasyExcel 解析任务 在子任务中调用 easyexcel 的read方法,传入自定义监听器和解析范围(startRow、endRow)

五、数据库批量写入优化

  1. 使用 MyBatis 批处理 减少 IO 在业务层开启ExecutorType.BATCH模式,累积 SQL 后一次性执行,降低数据库连接开销

  2. 控制并发写入 线程数通过 Redis 分布式锁限制同时写入数据库的线程数(如最多 5 个线程),避免数据库连接池耗尽

六、进度追踪与异常处理

  1. 实时更新任务进度在 Redis 中存储任务进度(总条数、成功数、失败数),前端通过任务 ID 轮询查询

  2. 错误数据收集与重试对解析或入库失败的行,记录行号和错误原因,导入完成后生成 "错误 Excel" 供用户下载修正

七、资源清理与任务归档

  1. 临时文件清理导入完成后(无论成功 / 失败),通过定时任务删除临时目录的 Excel 文件(保留 7 天备份)

  2. 任务结果归档将导入结果(总条数、成功数、错误信息)存入数据库归档,便于后续审计和问题追溯

相关推荐
CodeCraft Studio15 小时前
国产化Excel处理控件Spire.XLS教程:使用Java将CSV转换为PDF(含格式设置)
java·pdf·excel·spire.xls·文档格式转换·csv转pdf
qq_3344668617 小时前
excel VBA应用
java·服务器·excel
E_ICEBLUE17 小时前
快速合并 Excel 工作表和文件:Java 实现
java·microsoft·excel
祝威廉17 小时前
运营好搭档:InfiniSynapse 多Excel文件关联分析
excel
有蝉17 小时前
vue-office——支持多种文件(docx、excel、pdf)预览的vue组件库,支持vue2/3。也支持非Vue框架的预览。
vue.js·pdf·excel
一晌小贪欢1 天前
【Html模板】电商运营可视化大屏模板 Excel存储 + 一键导出(已上线-可预览)
前端·数据分析·html·excel·数据看板·电商大屏·大屏看板
oh,huoyuyan1 天前
【实战案例】火语言 RPA 采集豆瓣电影剧名、评分等(加载更多),保存到 Excel 全流程(附完整脚本)
excel·rpa
AntHub1 天前
vba 输出到日志文件
excel
zhangyao9403302 天前
关于js导入Excel时,Excel的(年/月/日)日期是五位数字的问题。以及对Excel日期存在的错误的分析和处理。
开发语言·javascript·excel
X@AKS3 天前
解决使用EasyExcel导出带公式的excel,公式不自动计算问题
excel