关于java:浅谈导出Execl的报表数据解决方案

2次阅读

共计 927 个字符,预计需要花费 3 分钟才能阅读完成。

我的项目中免不了要做一些数据导出性能,比方导出前一天的订单记录。波及导出性能可大可小,依据零碎具体的用户量、一天的订单量等状况。明天就讨论一下怎么设计一个正当的导出性能。

0x01:同步导出

这个计划最简略,就只需一个导出接口。这个接口只需实现依据用户条件到数据库查问相干数据,而后在应用程序中生成 Execl 电子表格,最初通过 Response 把生成的 Execl 电子表格回写到客户端即可

该计划简略,因为是同步导出,所以不实用大量数据导出。如果应用该计划进行大量数据导出的话,存在客户端(浏览器)超时的状况,导致导出失败;因为浏览器与 Nginx 之间有超时设置。

0x02:异步导出

异步导出个别须要设计三个接口。

第一个接口:开启一个线程对进行数据查问,并对查问到的数据进行 Execl 电子表格读写操作,同步返回导出状态标识;
第二个接口:查问第一个接口的实现状态,如果实现 Execl 电子表格操作,则返回 true;否则返回 false;
第三个接口:依据第二个接口返回的状态,如果返回 true,就调用下载 Execl 电子表格;否则返回 false 的话持续轮询调用第二个接口,直到返回 true;

这种计划比拟耗服务器性能,因为须要第二个接口轮询应用服务器的导出状态,设置一个比拟正当的轮询周期显得十分必要。另外,第一种计划和第二种计划都没有对导出的后果进行存库记录,如果要下载同样的数据,要整个流程从新走一遍。这样的话就引出第三种计划。

0x03:导出服务

该计划须要一张表和两个接口。

表的作用是用来存储谁进行了数据导出,导出的电子表格 Execl 寄存的硬盘目录
第一个接口:开启一个线程对进行数据查问,并对查问到的数据进行 Execl 电子表格读写操作,最初把电子表格的目录存储到数据库;同步返回胜利;
第二个接口:在导出列表中找出导出的记录,而后调用该接口进行 Execl 电子表格下载;

该计划须要额定做一个治理下载记录的界面,进行下载治理;这个计划的最大益处就是对下载操作进行了记录。如果须要对雷同的数据导出,只需导出一遍即可。不过减少了存储的空间,无论数据库还是硬盘,都减少了。

在理论我的项目中应用哪种计划,依据具体业务场景,具体抉择即可。其余文件类型的导出计划也能够参考该文章的计划进行操作。

正文完
 0