gpt4 book ai didi

Spring 交易TransactionSynchronizationManager : isActualTransactionActive vs isSynchronizationActive

转载 作者:行者123 更新时间:2023-12-03 10:34:52 26 4
gpt4 key购买 nike

我对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状态

If transaction synchronization isn't active, there is either no current transaction, or the transaction manager doesn't support transaction synchronization.



因此,您首先进行初始化,并使用 TransactionSynchronizationinitSynchronization()注册 registerSynchronization(TransactionSynchronization)。注册这些文件后, TransactionManager可以启动 Transaction并通过 TransactionSynchronizationManager告知 setActualTransactionActive(boolean)是否处于事件状态。

总之,即使没有注册 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.



所以不要忽略它。

关于 Spring 交易TransactionSynchronizationManager : isActualTransactionActive vs isSynchronizationActive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18771296/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com