gpt4 book ai didi

java - 链式事务注释的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 06:38:09 25 4
gpt4 key购买 nike

我不明白 Spring 的事务注释是如何工作的。所以我做了下一个测试,没有实际意义,但我它显示了我的问题:

public class TransactionalTest {
public void noTransaction(){
required();
}

@Transactional(propagation = Propagation.SUPPORTS)
public void supports(){
required();
}

@Transactional(propagation = Propagation.REQUIRED)
public void transaction(){
required();
}

@Transactional(propagation = Propagation.REQUIRED)
public void required(){
mandatory();
}

@Transactional(isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.MANDATORY)
public void mandatory(){
doSomething();
}

private void doSomething(){
//I don't feel like to do something.
}
}

方法 noTransactionsupportstransaction 调用同一方法:必需,但只有最后一个 (transaction) 可以正常工作。另外两个给我返回消息未找到标记为传播“强制”的事务的现有事务

在实际情况中,我有一些非事务性方法,它们调用用REQUIRED注释的事务性方法(它工作正常)。但是,如果非事务方法调用事务方法(用 REQUIRED 注释),而该方法又调用另一个用 MANDATORY 注释的事务方法,则会失败。

为什么会出现这种行为以及如何避免它?我注释了所有调用事务方法的方法以防万一?

最佳答案

如果您使用默认的 AOP 方法 Spring Proxy AOP,则建议是通过使用拦截并建议调用的代理对象包装带注释的类来实现的。当您使用这样的自调用时,您将绕过代理,并且不会应用建议。

如果您确实需要在自调用上应用建议,则需要使用 AspectJ AOP,它实际上会修改相关类而不是装饰它。

关于java - 链式事务注释的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25055182/

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