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