前言通过Mybatis做7000+数据量的批量插入的时候报错了,error log如下:被中止,呼叫 getNextException 以取得原因。可以看到这种异常无法捕捉,仅能看到异常指向了druid和ibatis的原码处,初步猜测是由于默认的SqlSession无法支持这个数量级的批量操作,下面就结合源码和官方文档具体看一看。这个效率可想而知,所以那个异常也有可能是insert timeout导致等待时间超过数据库驱动的最大等待值。好了,已解决问题为主,根据分析我们选择通过BATCH的方式来创建SqlSession,官方也提供了一系列重载方法:可以观察到主要有四种参数类型,分别是SqlSessionFactory 有六个方法可以用来创建 SqlSession 实例。上面我也提到了这种可能性,那么就再分批次处理试试,也就是说,在同一事务范围内,分批commit insert batch。
暂无评论