Ответ
Метод с Propagation.NEVER должен выполняться без транзакции. Если он вызывается в существующем транзакционном контексте, Spring выбрасывает IllegalTransactionStateException.
Пример и отличие:
@Service
public class Service {
@Transactional
public void transactionalMethod() {
neverMethod(); // ИСКЛЮЧЕНИЕ: IllegalTransactionStateException
}
@Transactional(propagation = Propagation.NEVER)
public void neverMethod() {
// Требует отсутствия активной транзакции
}
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void notSupportedMethod() {
// Будет выполнена БЕЗ транзакции, даже если она есть (она приостанавливается)
}
}
Когда использовать:
- Для методов, которые никогда не должны выполняться в транзакции (например, логирование, вызов внешних API).
- Как защитный механизм для гарантии отсутствия транзакции.