繁体   English   中英

由另一个 class 调用的同一 class 中的方法调用的事务方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM