我对Spring中的事务资源管理有些困惑。即,我对TransactionSynchronizationManager.isActualTransactionActive
和TransactionSynchronizationManager.isSynchronizationActive
的用法感到困惑。
到目前为止,可能是错误地,我假设使用isSynchronizationActive
(也在Spring代码库中)来确定是否存在由TransactionSynchronizationManager.initSynchronization()
发起的事件事务。就我而言,当我们暂停交易时,实际的isSynchronizationActive
仍然是正确的!因此,我认为建立正在运行的事务的正确方法是使用isActualTransactionActive
,对吗?
如果是这样,isSynchronizationActive
方法的实际意义是什么?我了解它告诉您是否可以添加同步,但是对于它告诉我们有关事务的信息我有点迷茫。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
最佳答案
您会注意到TransactionSynchronizationManager
的以下字段
private static final ThreadLocal<Set<TransactionSynchronization>> synchronizations =
new NamedThreadLocal<Set<TransactionSynchronization>>("Transaction synchronizations");
private static final ThreadLocal<Boolean> actualTransactionActive =
new NamedThreadLocal<Boolean>("Actual transaction active");
和方法
public static boolean isSynchronizationActive() {
return (synchronizations.get() != null);
}
public static boolean isActualTransactionActive() {
return (actualTransactionActive.get() != null);
}
TransactionSynchronizationManager
基本上充当TransactionSynchronization
的注册表。 Javadoc状态因此,您首先进行初始化,并使用
TransactionSynchronization
和initSynchronization()
注册registerSynchronization(TransactionSynchronization)
。注册这些文件后,TransactionManager
可以启动Transaction
并通过TransactionSynchronizationManager
告知setActualTransactionActive(boolean)
是否处于事件状态。总之,即使没有注册
isSynchronizationActive()
实例,TransactionSynchronization
也会告诉我们是否已启用TransactionSynchronization
。isActualTransactionActive()
告诉我们是否有实际的Transaction
对象处于事件状态。TransactionSynchronizationManager
Javadoc状态所以不要忽略它。
关于 Spring 交易TransactionSynchronizationManager : isActualTransactionActive vs isSynchronizationActive,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18771296/