java使用POI大数据量批量导出
1.问题背景
设计到几十张数据库表,每张表有几万到十几万数据不等,现在需要尽可能快的导出excel数据。
2.遇到的问题及解决思路
2.1 数据量大,生成速度慢。下载的文件太大。
使用多线程下载,一个表的数据分配一条线程,全部下载完成压缩成一个zip文件。
2.2 单表数据过多超过excel的条数据限制
当一个表的数据超过限制,使用csv文件的方式保存。
2.3 数据量大时,生成Excel数据和导出比nginx的默认响应时间(60s)长,导致接口请求超时。
当数据量大时,poi的excel生成和下载超过60s难以避免。但我们不能轻易去修改nginx的响应时间。我把生成数据文件和下载分为两个接口,
消耗的时间主要是在生产数据文件的接口上,这里我生成数据的接口先是直接响应并给出文件名,然后开启另外的线程去生成文件,绕过nginx的
超时时间,前端拿到文件名,定时10s去调用判断文件是否存在的接口,存在就去下载文件。