Ответ
По умолчанию используется Propagation.REQUIRED.
Что это означает:
- Если транзакция уже существует, метод будет выполняться в её контексте.
- Если активной транзакции нет, будет создана новая.
Пример явного указания (избыточного, так как это значение по умолчанию):
@Transactional(propagation = Propagation.REQUIRED)
public void processOrder(Order order) {
// ...
}
Другие варианты распространения (Propagation):
REQUIRES_NEW– Всегда создает новую транзакцию, приостанавливая существующую.SUPPORTS– Выполняется в транзакции, если она есть, и без неё, если нет.MANDATORY– Требует наличия активной транзакции, иначе выбрасывается исключение.NOT_SUPPORTED– Всегда выполняется без транзакции, приостанавливая существующую.NEVER– Запрещает наличие транзакции, иначе выбрасывается исключение.NESTED– Создает вложенную транзакцию, если она существует (работает с точками сохранения Savepoint).