[英]Transactional method called by method in same class called from another class
我有一个事务方法,它被同一个 class 中的方法调用多次(在循环中)。 同一 class 中的此方法由不同 class 中的方法调用。 根据我的调查,当我们在同一个 class 中调用事务方法时,这没有效果。 使用相同的事务。 但就我而言,是否会使用新的交易?
结构:
A.class - Method A
|-> B.class - Method A
|-> call mutiple times - B.class - @Transactional Method B
你能建议吗?
我的期望是每次循环遍历方法 B 时都会创建一个新事务。 我是否需要将方法 B 传递给不同的 class? 还是每次都会开始新的交易?
因此,默认情况下,有两件事可能对您不利。
Spring 的默认 txn 拦截器,这是 AOP 事务的工作方式,不会在同一实例中接收调用。 这可以通过切换到 AspectJ weaving 来改变。 这篇文章有一个很好的解释https://www.baeldung.com/spring-aop-vs-aspectj IIRC spring 中的默认是 jdk 代理。
Spring 的默认事务注释将传播现有的 txns。 因此,如果没有预先存在的 txn 并且您克服了上述问题,您应该得到您想要的。 如果存在预先存在的 txn,默认情况下会使用它,但可以通过修改@Transactional
注释上的propagate
参数来更改此行为。 这篇文章有很好的解释: https://www.baeldung.com/spring-transactional-propagation-isolation
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.