【问题标题】:Spring transaction when calling private method调用私有方法时的Spring事务
【发布时间】:2017-08-11 08:16:44
【问题描述】:

我有两个问题。

如果我有方法:

@Transactional
public method1(){
    method2()
}

public method2(){
    dao.save()
}

如果method2()出现异常,会不会回滚?

另一个问题:
如果我有方法:

@Transactional
public method1(){
    method2()
}

private void method2(){
    dao.save()
}

如果method2()出现异常,会不会回滚?

【问题讨论】:

  • 两种情况下都可以回滚

标签: spring transactions


【解决方案1】:

是的,会有回滚。 私有方法将在同一个事务中运行。您应该知道您不能拥有 @Transactional 私有方法。如果不引发任何错误,它将无法工作。 Spring Docs 中解释了这种行为:

由于 Spring 的 AOP 框架基于代理的特性,内部调用 根据定义,目标对象不会被拦截。对于 JDK 代理, 只能拦截代理上的公共接口方法调用。

【讨论】:

    【解决方案2】:

    两者都是。事务性方法意味着在方法的整个运行期间必须没有错误。

    如果您从内部调用的方法之一出现错误,这些错误将被传播并使事务失败并回滚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-31
      • 2023-03-20
      • 2013-08-30
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 2021-08-28
      相关资源
      最近更新 更多