Встречается на собеседованиях • сегодня

Как работает транзакция в Spring

Spring управляет транзакциями через @Transactional аннотацию или программно через TransactionTemplate. Под капотом используется AOP для создания прокси, который обрабатывает начало, фиксацию или откат транзакции.

Ключевые моменты:

  • По умолчанию используется propagation REQUIRED – если транзакция уже есть, метод присоединяется к ней.
  • readOnly = true оптимизирует запросы (например, в Hibernate).
  • Откат происходит при необработанных RuntimeException (но не при checked исключениях).

Пример:

java
@Service
public class UserService {
    @Transactional
    public void transferMoney(Account from, Account to, double amount) {
        from.debit(amount);
        to.credit(amount);
        // Если здесь выбросится исключение – транзакция откатится
    }
}

Нюансы:

  • @Transactional на private методах не работает (проксирование через CGLIB требует видимости).
  • Внутренние вызовы методов одного класса не проксируются (проблема self-invocation).
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы