首页 文章

Spring @Transactional传播属性

提问于
浏览
2

我有一个关于spring transaction propagation的问题 . 我理解不同的Spring事务传播,即 Propagation.REQUIREDPropagation.REQUIRES_NEW 等 . 我不清楚的是,如果嵌套事务具有不同的传播值,它将如何表现 .

例如,如果我使用 @Transactional(propagation = Propagation.REQUIRED) 来注释方法 m1 . 如果我调用注释为 REQUIRES_NEW 的方法 m2 . 会有什么样的行为?如果在 m2 中发生异常,它将回滚 m2m1 中的更改,或仅回滚 m1 的更改 . 同样 m1 注释为 REQUIRES_NEWm2 注释为 REQUIRED .

1 回答

  • 0

    它在spring documentation for Transaction Propagation中得到了很好的解释 .

    方法的传播行为定义了Spring在该方法的进入/退出时的行为方式,以及当时事务已经存在(或不存在)时会发生什么 .

    堆栈上方法的传播行为(无论是调用你的方法)都是无关紧要的 .

    对于你的例子:

    外(m1): REQUIRED
    内(m2): REQUIRES_NEW
    结果:将为m2创建一个完全独立的事务,它可以单独提交/回滚 . 具有 REQUIRED 的m1与m2无关 .

    外(m1): REQUIRES_NEW
    内(m2): REQUIRED
    结果:Spring将在输入m2时检查事务是否存在,或者如果不存在则创建一个事务 .

相关问题