如何解决当@Transactional(readonly=true) 方法调用@Transactional(readonly=false) 方法时会发生什么,反之亦然?
我想知道,当@Transactional(readonly=true) 方法调用@Transactional(readonly=false) 方法时会发生什么?说一下propagation = 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) 方法会发生什么?我想对于最后一种情况,它只会从外部范围考虑 @Transactional(readonly=false)。
解决方法
从 readOnly=false
调用 readOnly=true
不起作用,因为前一个事务仍在继续。
这是因为之前的交易正在继续。
如果你想让它工作,你必须让它开始一个新的事务。 示例:
public class ServiceB {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void write() {
// some write to repo ..
}
}
在这种情况下,它将起作用,因为将启动一个新的事务。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。