我正在调用具有以下注释的服务:
@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'?
提前致谢 克里斯
答案 0 :(得分:2)
解决方案#1 您可以指定要调用的方法获取自己的事务。 你可以通过注释方法来做到这一点。
@Transactional(propagation = Propagation.REQUIRES_NEW)
这样,如果方法(myMethodA)被标记为回滚,那么只会回滚该事务,而不是回调事务。
只有在允许被调用的方法管理自己的事务并且不想回滚调用者事务时才有效。
解决方案#2 也许您可以尝试子类化并更改事务注释属性。