![](/img/trans.png)
[英]Spring Boot. @Transactional method calling a @Transactional(readonly=true) method
[英]What happens when @Transactional(readonly=true) method calls @Transactional(readonly=false) method and vice versa?
我想知道,当@Transactional(readonly=true) 方法调用@Transactional(readonly=false) 方法时会发生什么? 用传播= Propagation.REQUIRED(在外部事务范围内)谈论情况。
public class ServiceA {
ServiceB serviceB;
@Transactional(readonly = true)
public void readOnly() {
// some reading from repo
serviceB.write()
}
}
public class ServiceB {
@Transactional
public void write() {
// some write to repo
}
}
对于相反的情况,同样的问题,如果@Transactional(readonly=false) 方法调用@Transactional(readonly=true) 方法会发生什么? 我想对于最后一种情况,它只会考虑外部 scope 中的 @Transactional(readonly=false)。
从readOnly=true
调用readOnly=false
不起作用,因为上一个事务继续进行。
这是因为之前的事务正在继续。
如果你想让它工作,你必须让它开始一个新的事务。 样本:
public class ServiceB {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void write() {
// some write to repo ..
}
}
在这种情况下,它将起作用,因为将启动一个新的事务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.