@Transactional 内部的 Spring 非事务性嵌套方法与 @Transactional 传播 = 支持

问题描述 投票:0回答:1

1)有什么不同吗

  • 如果我从@Transactional方法内部调用
    非事务性
    方法
  • 从同一个 @Transactional 方法调用传播级别为
    Transactional
     的 @
    SUPPORTS
    方法?

2)如果是相同的bean还是不同的,第一个问题的答案有什么区别吗?

谢谢

spring transactions spring-transactions
1个回答
1
投票

i) 有什么不同吗,

1) 如果我从@transactional 内部调用非事务方法并且

如果在事务中调用方法,没有任何设置,事务将跨越调用方法。

2) 调用@transactional,传播级别=来自相同@transactional方法的支持?

Propagation.SUPPORTS
带注释的方法将在当前事务中执行,就像调用非事务方法一样。

设置

@Transactional(propagation = Propagation.SUPPORTS)
和不设置
@Transactional
之间的唯一区别在 javadoc 中注明:

注意:对于具有事务同步的事务管理器,PROPAGATION_SUPPORTS 与根本没有事务略有不同,因为它定义了同步将应用的事务范围。因此,相同的资源(JDBC 连接、Hibernate 会话等)将在整个指定范围内共享。请注意,这取决于事务管理器的实际同步配置。

ii) 如果回答问题 i) 是相同的豆还是不同的豆,有什么区别吗?

Spring

@Transactional
注解默认使用AOP代理。

当您在同一个类中从

methodB
调用
methodA
时,不会为
methodB
激活 AOP 代理(即
@Transactional
中的
methodB
注解被完全忽略)。

当您从不同的班级调用时,行为与

i)

相同
© www.soinside.com 2019 - 2024. All rights reserved.