需要讲的异步导出的功能

之前写文件方式:无论是走mybatis里面的方式还是从存过方式取数据,都是全部取出来之后放到先放到List里面,存过方式的还要放到map中,之后写文件的时候,一直写完为止。不在中间进行flush处理,代码如内部电脑所示。修改后代码如修改后的代码所示:三种方式。

修改点:将读文件的方式修改为返回resultSet方式或者分批读数据,之后分批调用写文件构件写文件,并且在每200条的时候刷新一下,指导总思路模型:https://my.oschina.net/u/859433/blog/790833

具体操作如下:

 

  1. 1、优化取数据
  •  执行mybati方式取数据的将之前的所有handler里面的方法和逻辑移植到从库里面取数据的公共方法中,每次返回10000条数据,直到100000条,存储过程方式取数据的方式采取返回resultSet的方式,返回数据;具体代码如类
  • 其中 mybatis里面方式的开始也可以采取返回resultSet方式的,具体操作如链接:

mybatis流式查询: https://www.jianshu.com/p/0339c6fe8b61

 

  • 具体实现是下面这篇博文:

MyBatis Stream方式读取SELECT超大结果集

 

但是在修改的时候需要升级为mybatis的3.4.0以上的版本,升级后需要加拦截器才能使用(可以实现)

但是现在的mybatis的其他调用数据库方法封装的在工行内部的ctp工程里面,mybatis需要添加拦截器,现在的技术能力不足以排查所有封装的insert、selectOne等具体实现,有技术风险,故没有采用;

 

  • 为什么要加拦截器:

https://www.jianshu.com/p/ec40a82cae28Mybatis之工作原理)

https://blog.csdn.net/u014297148/article/details/78696096(具体拦截器工作位置)

 

 

  1. 2、内存分析

java内存溢出,一般会有以下几个位置,堆、栈、方法区、直接内存。

在现在的工程中jdk使用1.6的情况下,java虚拟类型HostPot版本在永久代中实现方法区

https://blog.csdn.net/sunshine__me/article/details/49992909

 

https://www.cnblogs.com/redcreen/archive/2011/05/04/2036387.html

https://www.cnblogs.com/junwangzhe/p/6282550.html

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值