Вопрос проверяет понимание транзакционного управления и механизмов согласованности данных в Spring.
В Spring транзакции чаще всего управляются декларативно через аннотацию @Transactional. Spring сам открывает, коммитит или откатывает транзакцию. Границы транзакции задаются на уровне метода или класса. Разработчику не нужно вручную управлять commit и rollback. Это делает код проще и безопаснее.
Spring предлагает декларативный и программный способы управления транзакциями, но в backend чаще используется декларативный подход.
Транзакция в Spring — это логическая единица работы с данными, которая либо выполняется полностью, либо откатывается целиком при ошибке.
@TransactionalАннотация определяет границы транзакции.
Где можно ставить
на метод
на класс (распространяется на все методы)
Что можно настроить
уровень изоляции
propagation
правила отката
Spring управляет транзакцией автоматически.
Последовательность
начало транзакции
выполнение метода
commit или rollback
Важный момент
rollback по умолчанию происходит только при RuntimeException
@Service
public class OrderService {
@Transactional
public void createOrder() {
// операции с БД
// при RuntimeException транзакция откатится
}
}
Используется реже
Применяется для сложных сценариев
Реализуется через TransactionTemplate
Spring берёт управление транзакциями на себя, позволяя разработчику сосредоточиться на бизнес-логике, но требует понимания правил распространения и отката.