同时使用easyexcel和Apache poi的依赖冲突问题

最近碰到了一个老项目使用poi导出6万行,40多列数据导致服务器内存吃满,cpu飙高的问题。

Apache poi存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行但是一旦并发上来后,一定会OOM或者JVM频繁的full gc。

所以打算用EasyExcel替换原来代码中的Apache poi,但是,老项目中用到poi的地方比较多,有的地方确定也不会有大数据量的导出,所以,打算只优化几个接口。那么,就需要在代码里同时使用EasyExcel和Apache poi。

此时,pom文件里的依赖配置如下:

                <dependency>
                    <groupId>com.alibaba</groupId>
                    <artifactId>easyexcel</artifactId>
                    <version>3.3.0</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi</artifactId>
                    <version>3.16</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi-ooxml</artifactId>
                    <version>3.16</version>
                </dependency>

修改代码。运行测试后发生了报错:

com.alibaba.excel.exception.ExcelGenerateException: java.lang.NoClassDefFoundError: com/alibaba/excel/support/util/CollectionUtils

最后发现问题是,easyexcel和Apache poi的依赖冲突,easyexcel是基于poi开发的,也就是说,它本身就有poi的依赖,那么此时同时使用就会造成依赖冲突。

优化依赖配置为:

       <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel-core</artifactId>
            <version>3.2.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi-ooxml</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi-ooxml-schemas</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

                <dependency>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi</artifactId>
                    <version>3.16</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.poi</groupId>
                    <artifactId>poi-ooxml</artifactId>
                    <version>3.16</version>
                </dependency>

手动排除easyexcel的Apache poi依赖,重新启动项目,运行依旧报错:

这个报错是因为导出过程中有日期类型数据,需要自定义转换器,具体解决办法可以参考:

https://www.cnblogs.com/asingh/p/14976074.html

依赖冲突问题参考自这位老哥:

EasyExcel工具使用时报错:org/apache/poi/ss/usermodel/Date1904Support找不到-CSDN博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值