【发布时间】:2015-10-15 04:56:08
【问题描述】:
如果嵌套事务对调用和被调用方法具有不同的隔离级别,我想了解何时准确提交以及何时准确回滚,
例如,我有两个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就可以实现嵌套事务了。
提前致谢,
有效
【问题讨论】:
标签: java spring transactions nested-transactions