gpt4 book ai didi

java - Spring TransactionSynchronizationManager isActualTransactionActive() 和 getCurrentTransactionName() 混淆

转载 作者:行者123 更新时间:2023-11-30 06:58:36 26 4
gpt4 key购买 nike

我对 Spring 的 TranscationSynchronizationManager 有点困惑isActualTransactionActive()getCurrentTransactionName() 方法。

给定一个非事务性服务

@Service
public MyServiceImpl implements MyService {
public void someMethod() {
boolean isActive = TransactionSynchronizationManager.isActualTransactionActive();
String name = TransactionSynchronizationManager.getCurrentTransactionName();
}

}

这里我看到 isActivefalse,这是正确的,在另一边调用 getCurrentTransactionName() 我看到交易名称(它打印 de.mycompany.service.MyServiceImpl.someMethod)。

那么如果没有交易,为什么会有当前交易名呢?它不应该是 null 吗?

最佳答案

查看源代码
PlatformTransactionManager.getTransaction(),调用
AbstractPlatformTransactionManager.prepareTransactionStatus(),调用
AbstractPlatformTransactionManager.prepareSynchronization()

似乎当前事务定义的名称被传递给TransactionSynchronizationManager.setCurrentTransactionName(),无论是否存在实际事务

因此,在未启动实际事务的情况下(例如传播 NEVERSUPPORTS),您提到的混淆可能会发生。该方法可能更好地理解为获取当前事务定义名称

关于java - Spring TransactionSynchronizationManager isActualTransactionActive() 和 getCurrentTransactionName() 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32524327/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com