您会注意到以下字段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 状态
如果事务同步未激活,则要么没有当前事务,要么事务管理器不支持事务同步。
TransactionSynchronization
因此,您首先使用initSynchronization()
and进行初始化和注册registerSynchronization(TransactionSynchronization)
。当这些被注册时,TransactionManager
可以启动 aTransaction
并用 来TransactionSynchronizationManager
判断它是否处于活动状态setActualTransactionActive(boolean)
。
总之,isSynchronizationActive()
告诉我们是否TransactionSynchronization
已启用,即使没有TransactionSynchronization
实例已注册。
isActualTransactionActive()
告诉我们是否有一个实际的Transaction
对象处于活动状态。
javadocTransactionSynchronizationManager
状态
管理每个线程的资源和事务同步的中央助手。由资源管理代码使用,而不是由典型的应用程序代码使用。
所以不要忽视它。