【问题标题】:Spring @Transactional Service. What happens if it calls another @Transactional Service?Spring @Transactional 服务。如果它调用另一个@Transactional 服务会发生什么?
【发布时间】:2019-10-02 18:14:23
【问题描述】:
使用 Spring,我达到了以下场景。
我有一个必须是@Transactional 的服务,因为它调用了多个 DAO。但是它也会调用其他已经是@Transactional的服务。
不知何故,我将调用嵌套的@Transactional 服务。
Spring 会管理得很好吗?
【问题讨论】:
标签:
java
spring
transactions
spring-transactions
【解决方案1】:
@Transactional 没有任何显式参数使用propagation = REQUIRED。这意味着:
- 如果当前线程中没有事务,则会创建一个新事务
- 如果有交易,就会使用
带有@Transactional 注释的第二个服务(嵌套的)将在与第一个(外部的)相同的事务中执行。你不需要做任何事情。
在某些情况下,如果您想明确地将嵌套调用与外部调用分开,您可以使用propagation = REQUIRES_NEW。