如果我有以下代码:
@Component
public class A{
@Transactional(propagation = Propagation.REQUIRED)
public void a(){
//logic
b();
//logic
}
@Transactional(propagation = Propagation.REQUIRED)
public void b(){
//logic
}
}在这个代码示例中,有多少事务打开了Spring?
发布于 2018-02-26 08:49:21
无所谓。当从b()调用a()时,它不会通过代理,因此不会考虑b()上的任何事务属性。
如果通过代理(即类之外)调用a()或b(),则示例代码将打开1个事务,并且已经没有正在进行的事务。
发布于 2018-02-26 08:51:13
我在@pablo中添加了以下注意事项:在您的示例中,您无法看到实际的区别,因为您在同一个对象中调用了您的方法,这使得第二个方法上的@事务行为透明而没有效果:
在代理模式(这是默认的)中,只截获通过代理传入的外部方法调用。这意味着自调用,实际上,在目标对象中调用目标对象的另一个方法的方法,即使被调用的方法标记为@ transaction,在运行时也不会导致实际事务。
发布于 2018-02-26 08:49:52
https://stackoverflow.com/questions/48984379
复制相似问题