@transactional内的Spring非事务嵌套方法与@transactional传播=支持相同

时间:2018-07-04 08:26:12

标签: spring transactions spring-transactions

i)有什么区别,1)如果我从@transactional内部调用非事务方法,并且2)从同一@transactional方法调用传播级别=支持的@transactional?

ii)问题(i)是相同的豆还是不同的豆,是否有区别?

谢谢

1 个答案:

答案 0 :(得分:0)

  

i)有什么区别

     

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

如果您在事务中调用方法而没有任何设置,则事务将扩展到调用方法。

  

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

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

javadoc中记录了设置@Transactional(propagation = Propagation.SUPPORTS)与未设置@Transactional之间的唯一区别:

  

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

     

ii)问题(i)是相同的豆还是不同的豆,是否有区别?

使用AOP代理默认使用Spring @Transactional注释。

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

当您从其他班级打电话时,其行为与i)

相同