有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring@Transactional传播属性

我有一个关于spring事务传播的问题。我了解不同的Spring事务传播,即Propagation.REQUIREDPropagation.REQUIRES_NEW等。我不清楚的是,在具有不同传播值的嵌套事务的情况下,它会如何表现

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


共 (1) 个答案

  1. # 1 楼答案

    这在spring documentation for Transaction Propagation中解释得很好

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

    方法在堆栈上的传播行为(无论调用什么方法)都是无关的

    举个例子:

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

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