Я немного запутался в управлении ресурсами транзакций весной. А именно, я смущен насчет использования TransactionSynchronizationManager.isActualTransactionActive
и TransactionSynchronizationManager.isSynchronizationActive
.Весенние транзакции TransactionSynchronizationManager: isActualTransactionActive vs isSynchronizationActive
До сих пор, возможно, неправильно, я предположил, что isSynchronizationActive
был использован (также в пределах Spring codebase), чтобы выяснить, есть ли активная транзакция, инициированная TransactionSynchronizationManager.initSynchronization()
. Насколько мне известно, когда мы приостанавливаем транзакцию, фактический isSynchronizationActive
по-прежнему верен! Поэтому я полагаю, что правильный способ установления текущей транзакции - использовать isActualTransactionActive
, правильно?
Если это так, какова фактическая точка метода isSynchronizationActive
? Я понимаю, что это говорит вам, можно ли добавить синхронизации или нет, но я немного потерял о том, что он говорит нам о сделке ...
Спасибо, я получил выше. У меня есть следующий вопрос: когда вы пытаетесь выполнить вложенную транзакцию в распространении NOT_SUPPORTED, глобальная транзакция приостанавливается, но синхронизация для не транзакционного метода активна. Более того, если я выполняю этот не транзакционный код, например, TransactionTemplate, тогда шаблон транзакции фактически вызовет 'commit' в Менеджере транзакций, в свою очередь, выполнив все синхронизации. Это кажется немного странным для меня, поскольку что-то, что выполняется без транзакций, должно просто быть ...non-transactional – Bober02
@ Bober02 Можете ли вы привести пример (в редактировании) вашего метода '@ Transactioanl' NOT_SUPPORTED? У меня есть идея, но не уверен. –