Spring @交易服务。如果它调用另一个@Transactional 服务会发生什么?

Spring @Transactional Service. What happens if it calls another @Transactional Service?

使用 Spring,我达到了以下场景。

我有一个服务必须是 @Transactional 因为它调用了几个 DAO。但它也会调用其他已经 @Transactional.

的服务

不知何故,我将调用嵌套的 @Transactional 服务。

Spring会管理好吗?

@Transactional 没有任何显式参数使用 propagation = REQUIRED。这意味着:

  • 如果当前线程中没有事务,则会创建一个新的事务
  • 如果有交易,就会使用

@Transactional 注释的第二个服务(嵌套服务)将在与第一个服务(外部服务)相同的事务中执行。您无需执行任何操作。

在某些情况下,如果您想明确地将嵌套调用与外部调用分开,您可以使用 propagation = REQUIRES_NEW.