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

概述

使用Easy Poi导入Excel时特别慢

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

  1. 依赖
        <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)方法里的一段
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);就可以了。
    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 poi导入数据时特别慢的问题汇总所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部