0

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

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

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

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

谢谢!

4

1 回答 1

0

JdbcCursorItemReader 将在数据库中维护一个位置(光标),以便它知道接下来从哪里读取。此游标由锁维护。JdbcPageItemReader 似乎正在提交从已知起点和终点请求数据的查询,因此它只读取这两个点之间的数据,并且在调用之间不需要锁定。

于 2019-11-07T17:11:12.023 回答