架构设计@工程设计@服务稳定性之路

easyexcel踩坑实践

2019-10-31  本文已影响0人  spring_coderman

笔者最近在写一个业务报表的通用导出组件,目前内部版本正在开发中,设计初步方案已经完成,核心代码完成之后开始测试,但是在引用easyexcel之后出现了一些问题。

问题一:其中有一段异常:

[10-30 15:18:15,965 ERROR] [async.worker.sub_13] co\.da\.sp\.ds\.se\.co\.pr\.InvokerBase - Exception when invoke service fromIP:127.0.0.1  toIP:127.0.0.1--remoteIP:127.0.0.1--remotePort:59628
java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.CellStyle.setVerticalAlignment(Lorg/apache/poi/ss/usermodel/VerticalAlignment;)V
    at com.alibaba.excel.write.context.GenerateContextImpl.buildDefaultCellStyle(GenerateContextImpl.java:80)
    at com.alibaba.excel.write.context.GenerateContextImpl.<init>(GenerateContextImpl.java:68)
    at com.alibaba.excel.write.ExcelBuilderImpl.init(ExcelBuilderImpl.java:30)
    at com.alibaba.excel.ExcelWriter.<init>(ExcelWriter.java:41)
    at com.xxxx.commonexport.ExportHelperService.writeExcel(ExportHelperService.java:234)
    at com.xxxx.commonexport.CommonExportServiceImpl.getExportData(CommonExportServiceImpl.java:45)
    at CommonExportService_CommonExportServiceImpl_ProxyStub1572419863937.getExportData(CommonExportService_CommonExportServiceImpl_ProxyStub1572419863937.java)
    at CommonExportService_CommonExportServiceImpl_ProxyStub1572419863937.invoke(CommonExportService_CommonExportServiceImpl_ProxyStub1572419863937.java)
    at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

猜测可能是版本问题,网上百度了下,都说是poi组件版本较低,easyexcel依赖的是较高版本的,但是已经换成easyexcel2.0.1版本了,同时poi依赖也升级到高版本了,依然有问题,
easyexcel开源地址:https://github.com/alibaba/easyexcel

由于是本地测试查看服务框架加载的包路径到底有没有低版本的poi包

{FBACC885-DAE7-4AAD-BEBA-CD407D8A2A3D}_20191030152812.jpg

发现确实存在多个版本,于是执行mvn clean ,mvn package,mvn install之后poi版本统一使用eazyexcel依赖的版本,

问题二

执行之后出现另一个问题,

java.lang.NoClassDefFoundError: org/apache/commons/collections4/ListValuedMa

百度之后发现eazyexcel需要依赖高版本的集合包,于是显示引用一下

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-collections4</artifactId>
      <version>4.1</version>
    </dependency>

再次重新编译打包运行,程序正常执行。

问题三:就是升级完easyexcel之后,使用的easyexcel api已经过期

由于我这边也是一个通用的公共业务报表导出组件当然不希望使用过期的api,且实现过程中借鉴了其他项目的一些思路,以低版本的实现快速完成的,所以需要对低版本api进行改造。

 <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>easyexcel</artifactId>
      <version>1.0.2</version>
    </dependency>

如上是其他业务引入的低版本,查看easyexcel 的发版历史,我这边评估了下,由于是导出业务组件,所以基于2.0.1版本开发是最合适的。
easyexcel的发版历史:
https://github.com/alibaba/easyexcel/blob/master/update.md

easyexcel使用:https://alibaba-easyexcel.github.io/support/about.html

上一篇下一篇

猜你喜欢

热点阅读