之前的几篇文章中,提到了EXCEL导入的方法和相关代码的优化。但是在正式系统上线之后,由于老系统和新系统数据要进行同步复用,所以很多之前的老数据借助EXCEL批量导入的功能,导入到相应的表中。但是在导入的过程中...
之前的几篇文章中,提到了EXCEL导入的方法和相关代码的优化。但是在正式系统上线之后,由于老系统和新系统数据要进行同步复用,所以很多之前的老数据借助EXCEL批量导入的功能,导入到相应的表中。但是在导入的过程中发现,EXCEL解析的速度较快,但是点击导入功能,时间真是太久了,3000条数据可能需要30分钟甚至更长的时间。这迫使代码性能优化迫在眉睫。
观察了下EXCEL导入的流程,仔细发现了下面几步是可以进行优化的。优化思路是这样的:
在之前的系统中,用户首先需要下载标准格式的EXCEL模块,然后复制粘贴数据到EXCEL中。完了之后的话,登入系统,选择当前的文件并上传,系统后台的话收到前台传入的EXCEL文件,首先后台会将文件转化为IO流进行读取数据,并且的话对数据进行规则校验,区分出正确数据和错误数据,并将错误数据和总的数据返回到前台,因为错误数据都会有相应的标志,所以在总的数据进行循环遍历展示的时候,也依次把错误数据进行标红加粗显示出来,这样的话用户点击解析数据就能够知道哪些是正确的,哪些是错误的。之后的话前台也会出现一个导入正确数据的按钮,点击按钮,可以将正确数据导入到库中,前台只留下错误数据,正确数据会被导入到库中。那导入正确数据,后台的话又会重新去读取下之前上传的EXCEL表格,区分出符合规则的数据,并将这些数据导入到库中。
之前系统的流程就是这样的。仔细想了下,在之前EXCEL解析的时候,后台解析完数据只返回了错误数据和总的数据,但是偏偏没有返回正确数据,这一点不明白?于是咨询了下之前做这个系统的老员工,老员工说是因为JSON传入数据太多,导致从后台往前台传输的时候传输失败,又因为错误数据每次都很少,所以决定错误数据用JSON返回,正确数据就不返回了。待前台点击导入正确数据的时候,后台再重新去读取EXCEL。
明白了这个问题,就大致知道了代码该怎么优化了。最终的解决思路是: 在EXCEL解析的时候,解析出的正确数据和错误数据都转化成IO流序列化成文件保存到本地磁盘中去。当用户点击导入正确数据的时候,不用在重新去读取EXCEL了,只需要读取本地的文件转化为List集合,然后执行保存操作就可以了。 到这里,我们已经优化解决了第一个问题,但是后面又冒出了另一个问题,执行保存,用到原生的JDBC操作,大量的数据保存导致要不断打开关闭数据库连接,而且的话保存到多张不同的表,很难控制,导致速度还是很慢。之前的优化也就减少了1分钟,导入3000条数据还是需要30分钟至少。
想了很久,决定使用Oracle存储过程来保存,JAVA传入List集合数据到Oracle的存储过程中去,然后执行存储过程,事实证明这个想法是对的,使用存储过程,3000条数据仅仅只需要30秒的时间。但是我们在操作的过程中也遇到了不少的问题,JAVA读取的那个List集合要当作参数传入到存储过程中用作输入参数,就必须要自定义一个Oracle的自定义类型。并且JAVA的List集合赋值给Oracle的自定义类型参数的时候,要使用原生的JDBC连接,而不是由spring管理的代理连接数据源,不然的话会导致赋值不成功。
至此,EXCEL导入的优化就完成了,也主要解决了两个问题,虽然都很简单。但是主要是提供一个思路给大家,希望能够在遇到同样的问题的时候,可以参考。
本站为非盈利网站,如果您喜欢这篇文章,欢迎支持我们继续运营!
本站主要用于日常笔记的记录和生活日志。本站不保证所有内容信息可靠!(大多数文章属于搬运!)如有版权问题,请联系我立即删除:“abcdsjx@126.com”。
QQ: 1164453243
邮箱: abcdsjx@126.com