gpt4 book ai didi

java - Spring传播.REQUIRES_NEW

转载 作者:行者123 更新时间:2023-12-02 05:53:03 28 4
gpt4 key购买 nike

根据我的理解,以下代码中的 newPrint 方法应该创建一个新事务,但显然它打印出与 oldPrint 方法中使用的相同的事务状态对象。我正在从另一个类(class)调用 oldPrint。是因为使用 this 调用了 newPrint 吗?如果是,那么什么时候会创建新的交易?如果我从另一个类调用这两个方法,无论如何都会创建两个单独的事务,因为 @Transactional 在类级别使用。

@Transactional
public class Unsubcriber {


@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void newPrint() {
System.out.println(TransactionAspectSupport.currentTransactionStatus());
}

public void oldPrint() {

System.out.println(TransactionAspectSupport.currentTransactionStatus());
newPrint();
}

输出:

org.springframework.transaction.support.DefaultTransactionStatus@3bacd0e7
org.springframework.transaction.support.DefaultTransactionStatus@3bacd0e7

Propagation.REQUIRES_NEW起作用时会出现什么情况?

最佳答案

假设geoand的编辑说明是正确的,那么您问题的答案是Spring使用AOP代理来应用事务限制。因此,当调用从外部进入您的取消订阅者时,这将起作用,然后可以拦截该调用并应用事务边界。如果您从类中调用它,正如您所说,使用“this”,那么就没有可以完成的代理,因此您的 @Transactional 将不会发挥作用。

关于java - Spring传播.REQUIRES_NEW,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23364572/

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