我正在调用具有以下注释的服务:

@Transactional(rollbackFor=ExceptionA.class)
public void myMethodA(....) throws ExceptionA {
.
.
}

我从另一个Spring Bean中的另一个方法调用此方法。
@Transactional(rollbackFor=ExceptionB.class)
public void mainEntryPointMethod(....) throws ExceptionB {
.
  try {
    myMethodA()
  }
  catch (ExceptionA exp) {
   .
  }


.
}

我的问题是,如果myMethodA引发异常,我的事务(默认情况下是从mainEntryPointMethod-> myMethodA传递的)将被标记为回滚。有没有一种方法可以覆盖内部方法的'rollbackFor'?

提前致谢
克里斯

最佳答案

解决方案1
您可以指定所调用的方法获得自己的事务。
您可以通过注释方法来做到这一点。

 @Transactional(propagation = Propagation.REQUIRES_NEW)

这样,如果将方法(myMethodA)标记为回滚,则仅该事务将被回滚,而不是调用者事务。

只有在允许被调用方法管理自己的事务并且不想回滚调用方事务的情况下,这才起作用。

解决方案#2
也许您可以尝试继承并更改事务注释属性。

09-28 13:11