JAVA POI导入技术之性能优化(三)

白色玫瑰 程序猿

时间: 2023-05-22 阅读: 1 字数:2448

{}
之前的几篇文章中,提到了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导入的优化就完成了,也主要解决了两个问题,虽然都很简单。但是主要是提供一个思路给大家,希望能够在遇到同样的问题的时候,可以参考。

原文地址:https://blog.csdn.net/samile6899/article/details/80560375?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168474996616800215094151%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=168474996616800215094151&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-29-80560375-null-null.142^v87^control_2,239^v2^insert_chatgpt&utm_term=java%E4%BC%98%E5%8C%96

本文章网址:https://www.sjxi.cn/detil/12c845e645e549b98504b64608653be5

最新评论

当前未登陆哦
登陆后才可评论哦

湘ICP备2021009447号