У меня есть метод, который имеет свойство транзакции propagation = Propagation.REQUIRES_NEW
:
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void createUser(final UserBean userBean) {
//Some logic here that requires modification in DB
}
Этот метод можно вызывать несколько раз одновременно и для каждой транзакции, если возникает ошибка, чем она откатывается (независимо от других транзакций).
Проблема заключается в том, что это может заставить Spring создавать несколько транзакций, даже если они доступны, и могут вызвать некоторые проблемы с производительностью.
Java doc propagation = Propagation.REQUIRED
говорит: Support a current transaction, create a new one if none exists.
Это, похоже, решает проблему производительности, не так ли?
Как насчет проблемы с откатом? Что делать, если вызов нового метода откатывается при использовании существующей транзакции? не будет ли откат всей транзакции даже предыдущими вызовами?
[EDIT] Я думаю, мой вопрос был недостаточно ясным:
У нас есть сотни клиентов, подключенных к нашему серверу.
Для каждого клиента, естественно, необходимо отправить отзыв о транзакции (OK или исключение → откат).
Мой вопрос: если я использую REQUIRED
, означает ли это только одна транзакция, а если 100-й клиент сталкивается с проблемой, первая транзакция клиента также откатится?