[英]Strange behaviour for chainned transactional annotation
我不知道它是如何工作的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.
}
}
方法noTransaction
, supports
和对同一方法的transaction
调用: required
但只有最后一个( transaction
)可以正常工作。 另外两个还给我以下消息:找不到针对带有传播“强制性”标记的交易的现有交易 。
在实际情况下,我有一些非事务方法,这些方法调用以REQUIRED
注释的事务方法(工作正常)。 但是,如果非事务方法调用一个事务方法(用REQUIRED
注释),而该事务方法又调用了另一个用MANDATORY
注释的事务方法,则它将失败。
为什么这种行为以及如何避免呢? 我注释了所有调用transaccional方法的方法,以防万一?
如果您使用默认的AOP方法Spring Proxy AOP,则通过将带注释的类与代理对象一起包装来实现建议,该代理对象可以拦截并建议调用。 当您使用这样的自我呼叫时,您将绕过代理服务器,并且该建议不会被应用。
如果确实需要在自调用上应用建议,则需要使用AspectJ AOP,它实际上是在修改所讨论的类而不是修饰它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.