控制器发出的多个事务调用

时间:2018-06-20 09:12:24

标签: spring spring-mvc

我遇到这样的情况,可以说我有两项服务

AccountService 
CustomerService

两者都通过@Transactional进行了注解,并带有某些createXXX()方法。

现在,从我的AccountController可以说我有一个方法,我将首先调用createAccount(),一旦我从createAccount()取回了帐户ID,就可以调用{{1} }(要创建客户并从createCustomer()上的Account更新帐户ID)

如果由于某种原因Customer失败,我将处于受污染的状态,其中createCustomer()已被保留,但未创建Account

我应该用Customer解决这个问题还是应该处理这种情况?

1 个答案:

答案 0 :(得分:1)

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