【发布时间】:2018-07-04 08:26:11
【问题描述】:
i) 有什么区别吗,1) 如果我从 @transactional 内部调用非事务性方法,并且 2) 调用传播级别 = 支持同一 @transactional 方法的 @transactional?
ii) 如果对问题 i) 的回答是相同的 bean 还是不同的,有什么不同吗?
谢谢
【问题讨论】:
标签: spring transactions spring-transactions
i) 有什么区别吗,1) 如果我从 @transactional 内部调用非事务性方法,并且 2) 调用传播级别 = 支持同一 @transactional 方法的 @transactional?
ii) 如果对问题 i) 的回答是相同的 bean 还是不同的,有什么不同吗?
谢谢
【问题讨论】:
标签: spring transactions spring-transactions
i) 有什么区别吗,
1) 如果我从@transactional AND 内部调用非事务性方法
如果你在事务中调用一个方法,没有任何设置,事务将跨越到调用方法。
2) 调用 @transactional,传播级别 = 支持来自同一 @transactional 方法?
Propagation.SUPPORTS注解的方法会在当前事务中执行,就像调用非事务方法一样。
设置@Transactional(propagation = Propagation.SUPPORTS) 和不设置@Transactional 之间的唯一区别在javadoc 中注明:
注意:对于具有事务同步的事务管理器,PROPAGATION_SUPPORTS 与根本没有事务略有不同,因为它定义了同步将适用的事务范围。因此,相同的资源(JDBC 连接、Hibernate Session 等)将在整个指定范围内共享。请注意,这取决于事务管理器的实际同步配置。
ii) 如果对问题 i) 的回答是相同的 bean 还是不同的,有什么不同吗?
Spring@Transactional注解默认使用AOP代理。
当您在同一个类中从methodA 调用methodB 时,不会为methodB 激活AOP 代理(即完全忽略methodB 中的@Transactional 注释)。
当你从不同类调用时,行为与i)相同
【讨论】: