gpt4 book ai didi

java - 在另一个实例中从事务性方法调用 spring 非事务性方法时,事务是否得到传播?

转载 作者:行者123 更新时间:2023-12-02 02:32:13 26 4
gpt4 key购买 nike

很抱歉,如果之前已经讨论过,但我在@Transactional spring java annotation 的所有相关讨论中都找不到答案。

如果我们在另一个没有@Transactional 注解的实例中从一个有@Transactional 注解的方法调用一个方法,会发生什么?来自 @Transactaional 注释方法的事务会被暂停吗?还是会传播?

我发现很多关于第二个方法的调用是否来自同一个实例的讨论,但如果第二个非事务性方法在另一个实例中则没有。感谢您的帮助!

如下例所示,如果从 A 类中的 methoda() 调用 B 类中的 methodb() 会发生什么情况?来自 methoda 的事务会被传播还是 methodb 会是非事务性的?

示例代码如下:

public class A
{

@Autowired
B b;

@Transactional
public void methoda(){

b.methodb();

}

}



@Component
public class B
{
//this method is non transactional and is called from method A in class A
public void methodb()
{
//do some db updates
}

}

最佳答案

如果 B 中没有 @Transactional 注释来告诉它其他情况,则 b 方法使用在调用 A.methoda 时建立的事务。这对于 Spring 来说是正常的,我们有标记为事务性的组件,它们调用参与当前事务的 DAO,但本身没有标记为事务性。

如果确实要暂停当前交易,可以加上this annotation到 b 方法:

@Transactional(propagation = Propagation.NOT_SUPPORTED)

在 Spring API 文档中有关于暂停事务的警告:

NOTE: Actual transaction suspension will not work out-of-the-box on all transaction managers. This in particular applies to JtaTransactionManager, which requires the javax.transaction.TransactionManager to be made available to it (which is server-specific in standard Java EE).

关于java - 在另一个实例中从事务性方法调用 spring 非事务性方法时,事务是否得到传播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64877922/

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