Какие последствия наступают, если в Spring вызвать метод, аннотированный @Transactional с параметром Propagation.NEVER?

Если в Spring вызвать метод, аннотированный @Transactional с параметром propagation = Propagation.NEVER, то Spring проверит, что в текущем потоке выполнения нет активной транзакции.

Короткий ответ

Что ответить на собеседовании

Если в Spring вызвать метод, аннотированный @Transactional с параметром propagation = Propagation.NEVER, то Spring проверит, что в текущем потоке выполнения нет активной транзакции. Если транзакция уже существует, будет выброшено исключение IllegalTransactionStateException.

Подробный разбор

Ответ с пояснениями

Если в Spring вызвать метод, аннотированный @Transactional с параметром propagation = Propagation.NEVER, то Spring проверит, что в текущем потоке выполнения нет активной транзакции. Если транзакция уже существует, будет выброшено исключение IllegalTransactionStateException.

Это означает, что метод с Propagation.NEVER запрещает выполнение в рамках транзакции. Такой подход используется, когда нужно гарантировать, что метод выполнится вне транзакционного контекста, например, для операций, которые не должны быть частью транзакции или для вызова внешних сервисов, где транзакции не поддерживаются.

Пример:

@Transactional(propagation = Propagation.NEVER)
public void nonTransactionalMethod() {
    // код, который не должен выполняться в транзакции
}

Если вызвать этот метод из другого метода, который уже находится в транзакции, будет ошибка.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее