2015-03-08 5 views
0

Я продлеваю весенний пакет ItemListenerSupport и переопределяя onProcessError() для работы с состояниями ошибок. Моя проблема заключается в том, что я ожидал, что смогу написать в базу данных как часть моей обработки, но, похоже, она включена в транзакцию для партии и откатывается назад. Есть ли способ заставить его выполнить откаты раньше и разрешить onProcessError() для обновления db? Или есть другой способ, которым я должен справиться с этим?Откат повторителя сбоя весны

+0

Можете ли вы проверить, что ваши изменения сделаны? Возможно, ваша транзакция ускользает, и у вас нет доступного сеанса базы данных, и ваше исключение проглотило ваш провайдер постоянства. – JamesENL

+0

Да, мы можем видеть инструкцию обновления, за которой следуют 2 отката, и, наконец, 2 коммиты, которые, очевидно, ничего не сделают в этой точке. – Nixx

ответ

0

Опасается прямо там, в документации. Необходимо добавить мою собственную транзакцию.

Помните, что если ваш слушатель ничего не делает в методе onError(), он будет находиться внутри транзакции, которая будет откат. Если вам необходимо использовать транзакционный ресурс, такой как база данных внутри метода onError(), подумайте о добавлении декларативной транзакции к этому методу (подробнее см. В Справочном руководстве Spring Core) и присвоении атрибуту распространения значение REQUIRES_NEW.

Смежные вопросы