首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring transactions TransactionSynchronizationManager: isActualTransactionActive vs isSynchronizationActive

Spring transactions TransactionSynchronizationManager: isActualTransactionActive vs isSynchronizationActive
EN

Stack Overflow用户
提问于 2013-09-13 02:01:44
回答 1查看 13.3K关注 0票数 9

我对Spring中的事务资源管理有点困惑。也就是说,我对TransactionSynchronizationManager.isActualTransactionActiveTransactionSynchronizationManager.isSynchronizationActive的用法感到困惑。

到目前为止,我假设(也在Spring代码库中)使用了isSynchronizationActive来确定是否存在由TransactionSynchronizationManager.initSynchronization()发起的活动事务,这可能是错误的。就我而言,当我们挂起一个事务时,实际的isSynchronizationActive仍然是真的!因此,我认为建立一个正在运行的事务的正确方法是使用isActualTransactionActive,对吗?

如果是这样的话,isSynchronizationActive方法的实际意义是什么?我知道它告诉你你是否可以添加同步,但我对它告诉我们的关于事务的信息有点迷惑……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-13 03:03:46

您将注意到TransactionSynchronizationManager的以下字段

代码语言:javascript
复制
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");

和方法

代码语言:javascript
复制
public static boolean isSynchronizationActive() {
    return (synchronizations.get() != null);
}

public static boolean isActualTransactionActive() {
    return (actualTransactionActive.get() != null);
}

TransactionSynchronizationManager基本上充当TransactionSynchronization的注册表。javadoc声明

如果事务同步未处于活动状态,则表示没有当前事务,或者事务管理器不支持事务同步。

因此,您首先使用initSynchronization()registerSynchronization(TransactionSynchronization)初始化并注册TransactionSynchronization。当这些被注册后,TransactionManager可以启动一个Transaction并告诉TransactionSynchronizationManager它是否在setActualTransactionActive(boolean)中处于活动状态。

总之,即使没有注册TransactionSynchronization实例,isSynchronizationActive()也会告诉我们是否启用了TransactionSynchronization

isActualTransactionActive()告诉我们是否有实际的Transaction对象处于活动状态。

TransactionSynchronizationManager javadoc声明

管理每个线程的资源和事务同步的

中心帮助器。供资源管理代码使用,但不供典型应用程序代码使用。

所以不要忽视它。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18771296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档