Встречается на собеседованиях • сегодня
Откроется ли новая транзакция, если в одном сервисе из одного транзакционного метода вызвать другой
Если метод вызывается внутри одного класса (даже если он помечен @Transactional), Spring по умолчанию использует proxy-based AOP, поэтому транзакция не будет открываться заново — вызов произойдет в рамках существующей транзакции. Это поведение можно изменить через @Transactional(propagation = Propagation.REQUIRES_NEW).
Пример:
java
@Service
public class MyService {
@Transactional
public void methodA() {
methodB(); // Будет в той же транзакции!
}
@Transactional
public void methodB() {
// Логика
}
}Для создания новой транзакции нужно:
- Вынести метод в отдельный сервис
- Или использовать
self-injectionи вызывать через него:
java
@Autowired
private MyService self;
@Transactional
public void methodA() {
self.methodB(); // Теперь откроется новая транзакция
}
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы