`org.springframework.transaction.annotation.Transactional`的行为

时间:2017-04-26 14:14:56

标签: java spring transactions

假设我有以下两个班级。

class A {
  private B b;

  @Transactional
  public void a(){
    b.b();
    //do a stuff
    throw new RuntimeException("oops");
  }
}

class B {
  @Transactional
  public void b(){
    //do b stuff
  }
}

在这种情况下,方法b()(或b东西)也会被回滚吗?

1 个答案:

答案 0 :(得分:3)

在您的情况下,它将被回滚。

如果您的B b;由Spring自动连接(在您的情况下似乎不是)并且@Transactional方法上的b()已传播REQUIRES_NEW(目前默认为 - REQUIRE),这意味着不使用现有事务但是启动一个新事务,只有在这种情况下才会回滚b()上的提交。