由从另一个类调用的同一类中的方法调用的事务性方法



我有一个事务性方法,它被同一类中的方法多次调用(在循环中(。同一类中的此方法由不同类中的方法调用。根据我的调查,当我们在同一个类中调用事务方法时,这没有任何效果。使用相同的事务。但在我的情况下,会使用新的交易吗?

结构:

A.class - Method A
|-> B.class - Method A
|-> call mutiple times - B.class - @Transactional Method B

你能给我建议吗?

我的期望是,每次循环通过方法B时,都会创建一个新的事务。我需要将方法B传递给其他类吗?还是每次都会启动一个新的交易?

因此,默认情况下,有两件事可能会对您不利。

Spring的默认txn拦截器是AOP事务的工作方式,它不会在同一实例中接收调用。这可以通过切换到AspectJ编织来改变。这篇文章有很好的解释https://www.baeldung.com/spring-aop-vs-aspectjIIRC春季默认为jdk代理。

Spring的默认事务性注释将传播现有的txn。因此,如果没有预先存在的txn,并且你克服了上述问题,你应该得到你想要的。如果存在预先存在的txn,则默认情况下会使用它,但可以通过修改@Transactional注释上的propagate参数来更改此行为。这篇文章有一个很好的解释:https://www.baeldung.com/spring-transactional-propagation-isolation

最新更新