Я работаю над приложением Spring Batch, которое запускалось в тупик DB2 при использовании JdbcCursorItemReader по умолчанию. Когда пакетное задание столкнулось с ошибкой, мы настроили SkipListener для записи состояния «Ошибка» в соответствующую строку, когда возникла взаимоблокировка.
Мы обнаружили, что, используя JdbcPagingItemReader по умолчанию, мы смогли избежать сценария взаимной блокировки, хотя мы не совсем уверены, почему это так.
Мое понимание Spring Batch заключается в том, что любой Reader должен был освободить блокировку базы данных после того, как ResultSet был прочитан из запроса, но этого не произошло с JdbcCursorItemReader.
Может ли кто-нибудь помочь мне понять, почему это так?
Спасибо!