【问题标题】:Sprint transaction - REQUIRES_NEW behavior if the inner transaction failsSprint 事务 - 如果内部事务失败,则 REQUIRES_NEW 行为
【发布时间】:2017-10-26 16:44:41
【问题描述】:

假设我有两个事务,内部事务传播是 REQUIRES_NEW。

所以,第一个事务在事务 X 上运行,第二个事务创建一个新事务。并假设如果内部事务失败,外部事务是否也会失败?或者只有内部事务只会失败,使外部事务成功。

谁能解释一下上述场景中的行为?

赞赏!!!

【问题讨论】:

    标签: java spring hibernate spring-transactions


    【解决方案1】:

    它们是单独的事务(外部事务在内部运行时暂停),而不是嵌套事务。如果内部事务失败,则回滚。如果您抑制该异常,您仍然可以让外部事务成功,如果您选择这样做

    【讨论】:

    • 谢谢@Kayaman。所以如果我们没有抑制内部事务失败异常,那么外部事务也会失败。对吗?
    • 确实如此,而且您通常不会在它周围有catch(Exception),在正常情况下,两个事务都会失败。尽管如此,您仍然可以轻松捕获异常,例如在失败时重试(并且重试是有意义的)。
    • 有没有办法为内部事务添加异常处理?如果不是,那么如果内部事务失败,外部事务填充也总是失败。对吗?
    • 回滚由异常控制。您可以在@Transactional 注解中配置哪些异常会导致回滚,或者自己捕获异常而不让它们传播。
    猜你喜欢
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 2012-10-14
    • 2017-11-21
    • 2019-02-09
    • 2020-10-20
    • 2014-01-03
    相关资源
    最近更新 更多