我是靠谱客的博主 幽默毛豆,这篇文章主要介绍使用Easy poi导入数据时特别慢的问题汇总,现在分享给大家,希望可以做个参考。

使用Easy Poi导入Excel时特别慢

问题描述:
在使用easy poi导入一个5000多行的excel时特别慢,大概需要5~6分钟,经过查看源码,发现了问题并已经解决,现在记录一下

  1. 依赖
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>4.2.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> <version>4.2.0</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-annotation</artifactId> <version>4.2.0</version> </dependency>

使用的是4.2.0版本

  1. 源代码
    这段代码的位置是ExcelImportService类中的ExcelImportResult importExcelByIs(InputStream inputstream, Class<?> pojoClass,
    ImportParams params, boolean needMore)方法里的一段
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (needMore) { InputStream successIs = new ByteArrayInputStream(baos.toByteArray()); try { Workbook successBook = WorkbookFactory.create(successIs); if (params.isVerifyFileSplit()){ importResult.setWorkbook(removeSuperfluousRows(successBook, failRow, params)); //慢的原因定位到这行代码 importResult.setFailWorkbook(removeSuperfluousRows(book, successRow, params)); } else { importResult.setWorkbook(book); } importResult.setFailList(failCollection); importResult.setVerifyFail(verifyFail); } finally { successIs.close(); } }
  1. 解决思路
    既然这行代码执行的特别慢,那么就想办法不执行这段代码,让params.isVerifyFileSplit()为false就可以了。
    所以回到自己的代码里,将importParam里的VerifyFileSplit属性设置为false
    贴一下自己的方法的一部分代码,加上params.setVerifyFileSplit(false);就可以了。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public ExcelImportResult<?> resolveExcel(MultipartFile files, Class<?> t) throws CustomerException { log.info(">>>>> ready to resolve excel"); long start = System.currentTimeMillis(); //保存文件到指定的文件夹里, 并将 MultipartFile 转成File File file = saveFile(files, t, null); ImportParams params = new ImportParams(); params.setStartRows(0); //设置1,就遍历到第一行结束,如果设置2,就遍历到第二行结束 params.setHeadRows(1); params.setNeedVerify(true); //返回文件是否分割 params.setVerifyFileSplit(false); params.setVerifyGroup(new Class[]{ViliGroupOne.class}); //设置自定义的校验规则 setRuleByClass(t, params);

最后

以上就是幽默毛豆最近收集整理的关于使用Easy poi导入数据时特别慢的问题汇总的全部内容,更多相关使用Easy内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部