В настоящее время я использую аннотацию spring @transactional
для внесения ряда изменений в базу данных. При любом исключении, которое не было создано мной (например, мое предложение UPDATA нарушает ограничения столбцов в таблице), транзакция успешно откатывается. Однако в консоли сообщение об ошибке не выводится.
Я хотел бы обрабатывать такие случаи вручную. Например, я могу захотеть записывать такие события в txt-файл. Мне интересно, есть ли у меня способ поймать такие исключения (или, точнее, иметь прослушиватель для таких событий).
Соответствующий код
@Transactional
public class DefaultFooService implements FooService {
public Foo getFoo(String fooName) {
INSERT A ROW
UPDATE A ROW
}
}
В приведенном выше коде предположим, что INSERT A ROW
выполнено успешно, а UPDATE A ROW
не выполнено из-за SQLException
(например, из-за нарушения ограничений столбца). В настоящее время сообщение об ошибке не выводится на консоль, если для ведения журнала задано значение INFO. Когда я использую DEBUG, я вижу, что SQLException
обнаруживается, и tx откатывается.
Как я могу получить уведомление, когда транзакция не удалась и ее откатили?
======
Этот вопрос несколько отличается от динамической регистрации прослушивателя транзакций с помощью Spring? тем, что я хочу получать уведомления только в том случае, если моя транзакция не удалась и я хочу знать, почему это не удалось.
Чтобы проиллюстрировать проблему по-другому. В следующем блоке кода в настоящее время не будет выдано исключение (выведено в стандартный вывод). Как я могу поймать/обработать RuntimeException?
@Transactional
public class DefaultFooService implements FooService {
public Foo getFoo(String fooName) {
throw new RuntimeException();
}
}
org.springframework.transaction
, чтобы получить вывод журналов транзакций Spring. - person SrThompson   schedule 15.06.2018