我正在开发一个在使用默认 JdbcCursorItemReader 时遇到 DB2 死锁的 Spring Batch 应用程序。当批处理作业遇到错误时,我们设置了一个 SkipListener 来将“错误”状态写入相关行,这是发生死锁的时间。
我们发现,通过使用默认的 JdbcPagingItemReader,我们能够避免死锁情况,尽管我们不确定为什么会出现这种情况。
我对 Spring Batch 的理解是,一旦从查询中读入 ResultSet,Reader 就应该释放数据库上的锁,但是 JdbcCursorItemReader 似乎没有发生这种情况。
谁能帮助我理解为什么会这样?
谢谢!