我正在编写一个使用Spring Batch处理来自MySQL数据库表的7,637,064行的程序。我已经用较小的表获得成功,但当JdbcCursorItemReader试图打开游标时,此表中的大量行会导致OutOfMemoryError异常。Spring批处理 - JdbcCursorItemReader使用大型MySQL表抛出OutOfMemoryError
我可以通过抛出一个更大的Xmx来解决这个问题,但在我看来,Spring Batch应该有一种方法来处理这个问题,而且我可能只是缺少一个关键的配置。
Spring Batch的配置:
commit-interval="10" />
在JdbcCursorItemReader设置FETCHSIZE似乎没有任何效果。允许它运行完成的唯一方法是将maxRows设置为一个很小的数字,但只处理该数量的行。
相关的堆栈跟踪:
2012-11-21 11:25:29,931 DEBUG [org.springframework.batch.core.repository.dao.JdbcStepExecutionDao] -
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
at java.util.ArrayList.add(ArrayList.java:351)
at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2821)
at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:467)
at com.mysql.jd