我想了解在嵌套事务与调用和被调用方法的隔离级别不同的情况下,何时准确提交以及何时准确回滚,
例如,我有两个 spring 服务,我从 service1 的 method1 调用 service2 的 method2。
Method1 具有 REQUIRED 事务范围,Method2 具有 REQUIRES_NEW 事务范围,如下面的程序所示。
Service1 {
@Transactional(propagation = Propagation.REQUIRED)
method1()
{
for(int i=0; i<10; i++){
service2.method2();
}
// Some more code which takes some time to process
}
}
Service2 {
@Transactional(propagation = Propagation.REQUIRES_NEW)
method2()
{
//Save some information to DB
// Save an object using JPA
}
}
现在我的问题是,据我所知,REQUIRES_NEW 将启动一个新事务,但它会立即在现有的方法 2 上提交,还是 spring 会等到方法 1 完成然后提交?
我感兴趣的是在什么时间提交发生并且 DB 中的行锁被释放,这在方法 2 中持久存在。
注意:这里我将这两种方法放在不同的服务中,以便spring可以实现嵌套事务。
提前致谢,
瓦利