Спринг-Java Things Обработка сбоя отката недавно я работал над проектом и случайно обнаружил, что класс бросал вещи с откатом в отказе, и данные обычно вставлялись в базу данных, поэтому я тщательно проверял и посмотрел на конкретную причину.
Все по-прежнему начинается с проверенных исключений Java и не проверенных исключений.
Так что же является исключением типа проверки и что является исключением типа не инспекции?
Есть два простейших суждения:
1. Неверное исключение, унаследованное от Runtimeexception или ошибки, в то время как проверка исключения унаследовано от исключения (конечно, сама Runtimeexception также является подклассом исключения).
2. Не проверяемые исключения могут быть пойманы без пойманных, в то время как проверенные исключения должны быть обработаны с помощью блока операторов Try ... Catch или передавать исключение из превосходного метода обработки. Короче говоря, код должен быть записан для его обработки.
Структура исключения Java показана на рисунке ниже. Среди них исключения, которые непосредственно наследуют исключение, должны быть пойманы и проверены исключения.
Давайте оглянемся на мой код:
1. Название метода предшествует
@Transactional
2. File Configuration File Pressconcontext-xxx.xml также имеет связанные конфигурации для весенних вещей.
<bean id = "transactionManager"> <name = "dataSource" ref = "dataSource"/> <name = "rolbackOncommitfailure" value = "true"> </property> </bean>
Но почему вещь, которая была представлена после попытки ... исключение из броска вылова не откатится при вызове метода обслуживания?
После проверки соответствующей пружинной документации я обнаружил, что оригинальное управление декларативными транзакциями пружинных декларативных транзакций выполняло откаты от транзакций на не проверяемых исключениях и исключениях времени выполнения по умолчанию, в то время как откаты на проверенных исключениях.
Исключение, которое выброшено Try ... Catch in the Code - это исключение типа проверки. Spring's Framework не откатится назад по умолчанию.
При программировании можно избежать исключений, не проверенных, в то время как проверенные исключения должны обрабатываться с помощью блоков операторов TRY или передавать превосходному методу для их обработки. Короче говоря, код должен быть записан для их обработки.
Следовательно, исключение должно быть завоевано в службе, а затем снова вручную бросить не проверенное исключение, чтобы транзакция могла вступить в силу. Например:
Попробуйте {………} Catch (Exception E) {……… бросить новое BusinessException (e.getMessage ()); }Конечно, у нас есть более простой способ решить эту проблему, то есть изменить метод отката по умолчанию путем аннотирования параметров.
Norollbackfor и Rollbackfor определяются в аннотации @Transaction, чтобы указать, откатится ли определенное исключение.
Используйте примеры:
@Transaction (norollbackfor = runtimeexception.class)
@Transaction (rowlbackfor = exception.class)
Поэтому в приведенном выше вопросе вы можете напрямую добавить параметр отката @TransAction (ROLLACKFOR = EXCENCE.CLASS), который изменяет метод обработки транзакций по умолчанию.
Откровение:
Это требует от нас унаследовать пользовательское исключение от Runtimeexception при настройке исключения, так что при брошении на его бросок будет точно обрабатываться с помощью обработки транзакций по умолчанию Spring.
Суммировать
Выше приведено все содержание этой статьи о проблеме сбоя отката от Java Transaction. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!