Excel文件上传超时问题定位备忘
1、问题
上传带有手机号的excel文件,解析后,将手机号数据存储到oss,并返回oss地址以及手机号条数,
excel文件放开大小限制后,上传文件处理时间过过长。
- 文件大小:1.2M,行数:30265。
- http响应504,nginx日志499。



2、定位
2.1、本地跑工程,测试文件上传
现有代码:
1 | <dependency> |
其中apache poi的版本为:3.15。
1 | cn.afterturn.easypoi.excel.ExcelImportUtil |
测试耗时:217834ms
2.2、参考marketing-dump与member-dump数据导入工程代码
2.2.1、marketing-dump使用了easyexcel
1 | <dependency> |
其中apache poi的版本为:3.17。
1 | EasyExcel.read(inputStream, XXX.class, xxxImportListener).sheet().doRead(); |
测试耗时:3523ms
2.2.2、member-dump使用了jeecg的easypoi
1 | <dependency> |
其中apache poi的版本为:3.15。
1 | org.jeecgframework.poi.excel.ExcelImportUtil |
测试耗时:3267ms
2.3、升级afterturn easypoi 版本到4.4.0
- apache poi的版本为:4.1.1。
测试耗时:873ms
3、思考
3.1、为什么2.4.0版本的jeecgframework的easypoi比3.0.3版本的afterturn的处理速度快?
对比了一下内部的方法,主要区别在于,afterturn多了一段代码,内部循环处理比较耗时。


3.2、jeecgframework与afterturn有什么关系,为什么方法参数那么相似?
上海悟耘信息科技有限公司 EasyPoi官网 AiCode官网 风铃官网 windbell官网
3.3、为什么升级4.4.0版本后的afterturn easypoi 速度那么快?
增加了参数needMore,当值为false时,速度会快,当将值改为true,速度就会从873ms下降到12818ms。

4、解决
- 现有cn.afterturn的easypoi在系统中存在依赖,所以版本不可随意升级,所以只能通过引入新的jar来解决问题。
- easyexcel使用的apache poi版本与afterturn easypoi有些冲突,没选这个方案。
- 必须保证底层apache poi版本与afterturn easypoi保持一致,所以引入jeecg easypoi 2.4.0版本临时解决问题。
5、注意
当macan工程的导出功能全部迁移到task工程,可将afterturn easypoi版本升高,并去掉jeecg easypoi依赖。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!









