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

Сколько будет транзакций, если один метод с аннотацией Transactional вызывает другой с этой же аннотацией в одном классе в Spring

В Spring по умолчанию будет только одна транзакция. Это происходит из-за работы Spring AOP - проксирование классов. Внутренние вызовы методов в одном классе не перехватываются прокси, поэтому аннотация @Transactional на внутреннем методе игнорируется.

Пример:

java
@Service
public class MyService {
    
    @Transactional
    public void outerMethod() {
        innerMethod(); // не создаст новую транзакцию
    }
    
    @Transactional
    public void innerMethod() {
        // выполняется в транзакции outerMethod
    }
}

Чтобы изменить поведение, можно:

  1. Использовать самовызов через ApplicationContext
  2. Вынести innerMethod в отдельный сервис
  3. Использовать AspectJ вместо Spring AOP
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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