在事务方法中调用其他事务方法时,因为spring事务传播属性,会将事务合二为一。当子方法报错抛异常时,spring将该事务标记为 rollback only。父方法再执行事务就会报Transaction rolled back because it has been marked as rollback-only异常。
代码:
// 父方法
@Transactional(rollbackFor = Exception.class)
public void test() {
try {
handlerService.testa();
} catch (Exception e) {
e.printStackTrace();
}
OutsideMessageManage data = new OutsideMessageManage();
this.insertSelective(data);
}
// 子方法
@Transactional(rollbackFor = Exception.class)
public void testa() {
if(1==1){
throw new RuntimeException("aaa");
}
}
//测试方法
@Test
public void test(){
manageService.test();
}