MyBatis缓存设置的坑

最近一个项目用到MyBatis,因为是Batch,处理的数据量比较大,所以分批处理,一次1000件。发现处理的数据到20万件左右,内存就受不了了,以为是Java内存死锁了,结果用Jmap一看内存,发现是MyBatis的缓存。

然后,我在网上找了一下,把设置值的cacheEnabled设置为false,发现结果还是一样。

我项目中用到的是Spring+MyBatis。发现这种方法不行之后,在Spring的设置文件也改了一下,发现还是不行。

然后觉得应该是在检索语句里设置,在网上找了一下,发现MyBatis会对同一个Session使用一级缓存,最多能把Session改成STATEMENT而已,但对于同一个检索来说,这样也是没用了。

后面找到了一个Option的注释标签,在SQL的Repository的检索函数之后加上useCache和flushCache就行。

具体代码(非实际代码,只能用来参考)如下:

Java
@Select("SELECT * from Test where id between #{start} and #{end}")
@Options(useCache = false, flushCache = true)
public List<TestObject> select(@Param("start") int start, @Param("end") int end);

转载请注明:宇托的狗窝 » MyBatis缓存设置的坑

发表我的评论
取消评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址