java—当@transactional(readonly=true)方法调用@transactional(readonly=false)方法,反之亦然时会发生什么?

yvgpqqbh  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(544)

我想知道,当@transactional(readonly=true)方法调用@transactional(readonly=false)方法时会发生什么?使用propagation=propagation.required(在外部事务范围内)讨论情况。

  1. public class ServiceA {
  2. ServiceB serviceB;
  3. @Transactional(readonly = true)
  4. public void readOnly() {
  5. // some reading from repo
  6. serviceB.write()
  7. }
  8. }
  9. public class ServiceB {
  10. @Transactional
  11. public void write() {
  12. // some write to repo
  13. }
  14. }

同样的问题对于相反的情况,如果@transactional(readonly=false)方法调用@transactional(readonly=true)方法会发生什么?我想对于最后一种情况,它只考虑外部作用域中的@transactional(readonly=false)。

pftdvrlh

pftdvrlh1#

打电话 readOnly=falsereadOnly=true 由于上一个事务继续,因此不起作用。
这是因为上一个事务正在继续。
如果你想让它工作,你必须让它开始一个新的事务。样品:

  1. public class ServiceB {
  2. @Transactional(propagation = Propagation.REQUIRES_NEW)
  3. public void write() {
  4. // some write to repo ..
  5. }
  6. }

在这种情况下,它将工作,因为将启动一个新的事务。

相关问题