有如下代码:
public class Test{
@Autowired
private Dao dao;
@Autowired
private Service service;
@Transactional(propagation=Propagation.REQUIRED,rollbackForClassName="Exception")
//入口方法
public Object testA(List<Map<String, Object>> param) throws Exception {
return this.testA(param,this.dao);
}
@Transactional(propagation=Propagation.REQUIRED,rollbackForClassName="Exception")
public Object testA(List<Map<String, Object>> param,Dao targetDao) throws Exception {
...
...
//如有异常,正常抛出
service.testB(param2,targetDao);
}
@Transactional(propagation = Propagation.REQUIRED, rollbackForClassName = "Exception")
public void testB(Map<String, Object> param2,Dao targetDao) throws Exception {
...
//此方法内有(rollback-only)
testC(param3,targetDao);
//如有异常,正常抛出
testD(param4,targetDao);
}
}
其中方法testC由其他人员开发,我去调用,该方法中有一旦遇到执行异常,进行回滚的写法,语句为TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
测试我整个方法时,会抛出异常:
Caused by: org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
故想请教一下各位前辈,如何在不能调整testC方法的基础上,处理报错,使得程序可以遇到异常正常回滚?