【问题标题】:Should @Transactional method roll back in case of calling a private method which throws RuntimeException in Spring?如果调用在 Spring 中引发 RuntimeException 的私有方法,@Transactional 方法是否应该回滚?
【发布时间】:2019-12-12 14:22:53
【问题描述】:

事务应该在这里回滚吗?

@Service
public class Serv {
    @Transactional
    public void method1() {
        method2();
    }
    private void method2(){
        throw new RuntimeException();
    }
}

或者它取决于什么?

(在今天之前,我对所描述的行为是 100% 确定的。但面试官说这取决于。我不同意他的观点,但当然没有帮助。)

【问题讨论】:

  • 在这段代码中它应该回滚。
  • 面试官有没有解释它取决于什么?可能method1是怎么调用的?
  • 面试官是否提供了您发布的代码,还是基于您对问题的解释?虽然您发布的代码确实应该回滚,但也许面试官的意思是别的。
  • 好的,伙计们,谢谢你们,我看没有问题,只是我应该向他澄清一下。

标签: java spring transactions rollback unchecked-exception


【解决方案1】:

最佳/通常的结果是你回答的回滚,但面试官说一般性陈述 这取决于

也许面试官的意思是检查你是否知道它什么时候不会按预期回滚

这意味着您不应该假设 @Transactional 确实有效,应该首先检查它,因为如果 @Transactional 无效,则不会回滚。

例如,在calling transactional method in same class 的情况下,如果从同一类中的method3() 调用method1() @Transactional 将不起作用并且不会回滚

【讨论】:

    猜你喜欢
    • 2016-05-03
    • 2011-05-22
    • 1970-01-01
    • 2017-07-09
    • 2010-10-23
    • 2013-06-17
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多