我对Spring中的事务资源管理有点困惑.也就是说,我对TransactionSynchronizationManager.isActualTransactionActive和TransactionSynchronizationManager.isSynchronizationActive的使用感到困惑.
到目前为止,可能不正确,我假设使用isSynchronizationActive(也在Spring代码库中)来确定是否存在由TransactionSynchronizationManager.initSynchronization()启动的活动事务.就我而言,当我们暂停一个事务时,实际的isSynchronizationActive仍然是真的!因此,我认为建立正在运行的事务的正确方法是使用isActualTransactionActive,对吗?
如果是这种情况,isSynchronizationActive方法的实际意义是什么?我理解它会告诉你是否可以添加同步,但我对它告诉我们有关交易的内容有点迷失…
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.
所以不要忽视它.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。