Spring Batch中的数据库锁定

时间:2018-11-21 21:38:00

标签: spring spring-batch db2-zos

我正在使用一个Spring Batch应用程序,该应用程序在使用默认JdbcCursorItemReader时遇到DB2死锁。当批处理作业遇到错误时,我们已经设置了SkipListener来将“错误”状态写入相关行,即死锁发生的时间。

我们发现通过使用默认的JdbcPagingItemReader,我们可以避免死锁情况,尽管我们不确定为什么会这样。

我对Spring Batch的理解是,一旦从查询中读取了ResultSet,任何一个Reader都应该释放数据库上的锁,但是JdbcCursorItemReader似乎没有发生这种情况。

谁能帮助我理解为什么会这样?

谢谢!

1 个答案:

答案 0 :(得分:0)

JdbcCursorItemReader将在数据库中保持一个位置(光标),以便它知道从下一个读取的位置。该游标由锁保持。 JdbcPageItemReader似乎正在提交从已知起点和终点请求数据的查询,因此它仅读取这两个点之间的数据,而无需在调用之间进行锁定。