Spring事务TransactionSynchronizationManager:isActualTransactionActive vs isSynchronizationActive

前端之家收集整理的这篇文章主要介绍了Spring事务TransactionSynchronizationManager:isActualTransactionActive vs isSynchronizationActive前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

如果是这种情况,isSynchronizationActive方法的实际意义是什么?我理解它会告诉你是否可以添加同步,但我对它告诉我们有关交易的内容有点迷失…

最佳答案
您将注意到TransactionSynchronizationManager的以下字段

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.

所以不要忽视它.

猜你在找的Spring相关文章