从 Controller 发出的多个事务调用

Fak*_*ode 5 spring spring-mvc

我有一种情况,可以说我有两项服务

AccountService 
CustomerService
Run Code Online (Sandbox Code Playgroud)

两者都@Transactional用一些createXXX()方法进行了注释。

现在,我AccountController可以说我有一个方法,我将首先调用createAccount(),一旦我从那里取回 Account-ID,createAccount()我就可以调用createCustomer()(创建一个客户并从Account上更新 Account-ID Customer

如果由于某种原因createCustomer()失败,我将留下一个Account已被持久化但未Customer创建的污染状态。

我应该用TransactionSynchronizationManagerOR 来解决这个问题,我应该如何处理这种情况?

Rom*_*hin 1

默认情况下,Spring 事务使用需要传播级别(请参阅 org.springframework.transaction.annotation.Transactional#propagation)。这意味着,除非存在现有事务,否则 Spring 不会创建新事务。使用此功能:您可以使用注释控制器的方法,@Transactional也可以创建一个将触发顶级事务的新服务。这个想法是,一旦您创建了一个事务,服务调用就不会创建新的事务。因此,您只有一个事务可以成功提交,也可以失败。