isSynchronizationActive

isSynchronizationActive

我对Spring中的事务资源管理有些困惑。即,我对TransactionSynchronizationManager.isActualTransactionActiveTransactionSynchronizationManager.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状态



因此,您首先进行初始化,并使用TransactionSynchronizationinitSynchronization()注册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/

10-11 04:41