我对Spring中的事务资源管理有点困惑.也就是说,我对TransactionSynchronizationManager.isActualTransactionActive和TransactionSynchronizationManager.isSynchronizationActive的使用感到困惑.
到目前为止,可能不正确,我假设使用isSynchronizationActive(也在Spring代码库中)来确定是否存在由TransactionSynchronizationManager.initSynchronization()启动的活动事务.就我而言,当我们暂停一个事务时,实际的isSynchronizationActive仍然是真的!因此,我认为建立正在运行的事务的正确方法是使用isActualTransactionActive,对吗?
如果是这种情况,isSynchronizationActive方法的实际意义是什么?我理解它会告诉你是否可以添加同步,但我对它告诉我们有关交易的内容有点迷失…
private static final ThreadLocal
和方法
public static boolean isSynchronizationActive() {
return (synchronizations.get() != null);
}
public static boolean isActualTransactionActive() {
return (actualTransactionActive.get() != null);
}
TransactionSynchronizationManager基本上充当TransactionSynchronization的注册表. javadoc说
If transaction synchronization isn’t active,there is either no
current transaction,or the transaction manager doesn’t support
transaction synchronization.
因此,您首先使用initSynchronization()和registerSynchronization(TransactionSynchronization)初始化并注册TransactionSynchronization.注册这些时,TransactionManager可以启动一个Transaction,并通过setActualTransactionActive(boolean)告诉TransactionSynchronizationManager它是否处于活动状态.
总之,isSynchronizationActive()告诉我们是否已启用TransactionSynchronization,即使没有注册任何TransactionSynchronization实例.
isActualTransactionActive()告诉我们实际的Transaction对象是否处于活动状态.
TransactionSynchronizationManager javadoc说明
Central helper that manages resources and transaction synchronizations
per thread. To be used by resource management code but not by typical
application code.
所以不要忽视它.