Встречается на собеседованиях • сегодня
Что произойдет при вызове публичного метода с @Transactional, который вызывает приватный метод с @Transactional REQUIRES_NEW
В Spring транзакционные аннотации (@Transactional) работают только на публичных методах, так как используют AOP-прокси. При вызове приватного метода с @Transactional аннотация игнорируется, даже если он вызывается из публичного транзакционного метода.
Пример:
java
@Transactional
public void publicMethod() {
// Работает в одной транзакции
privateMethod(); // @Transactional(REQUIRES_NEW) игнорируется!
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
private void privateMethod() {
// Выполнится в той же транзакции, что и publicMethod()
}Для разделения транзакций нужно:
- Сделать метод публичным
- Вызывать его через прокси (через this не сработает):
java
@Autowired
private MyService self;
public void publicMethod() {
self.privateMethod(); // Теперь REQUIRES_NEW сработает
}
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы