Spring事务中的方法调用传播

时间:2018-08-14 07:19:00

标签: java spring transactions

我正在阅读有关Spring Framework中的声明式事务管理的信息,我试图弄脏我的手。以下是两种情况:

案例1:从控制器调用方法testTransaction,类型级别不存在@Transaction批注。

@Override
@Transactional
public void testTransaction() {
    saveFoo2();
    saveFoo();
}
private void saveFoo2() {
    fooRepository.save(new Foo(null, "asd"));
}
private void saveFoo() {
    fooRepository.save(new Foo(null, "zxzxczxxc"));
    throw new RuntimeException("Rollback please");
}

情况2:从控制器调用方法testTransaction,类型级别不存在任何@Transaction注释。

@Override
@Transactional
public void testTransaction() {
    saveFoo2();
    saveFoo();

}

@Transactional
public void saveFoo2() {
    fooRepository.save(new Foo(null,"asdasd"));
}

@Transactional
public void saveFoo() {
    fooRepository.save(new Foo(null,"zxczaxc"));
    throw new RuntimeException("Rollback please");
}

根据我的理解,

在情况1中:每当调用testTransaction方法时,都会创建事务并将同一个事务传播到saveFoo2()和saveFoo()方法,并且同一个事务中的任何runtimeexception都会回滚。

在情况2中:春季事务处理代理服务器,并且只要发生来自同一bean的内部调用,那么该事务就不能回滚。 Reference但在这种情况下,从同一实例调用saveFoo2()和saveFoo(),但事务也正在回滚。我不清楚。

我的理解正确吗?您能指出我所缺少的吗?我做了很多研究,但无法弄清楚。这将是很大的帮助。

0 个答案:

没有答案