@Transactional(rollbackFor = { Exception.class })
public void test() {
try {
doDbStuff1();
doDbStuff2();
} catch (Exception e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//就是这一句了,加上之后,如果doDbStuff2()抛了异常, //doDbStuff1()是会回滚的
}
}
doSbStuff1(); //没有异常,数据已经新增
doDbStuff2();//出异常,后台报错
@Transactional(rollbackFor={Exception.class})+TransactionAspectSupport.currentTrasctionStatus().setRollBackOnly()
如果doDbSutff2()出现异常了,那么doSbStuff1()会进行回滚,也就没有之前新增的数据。
一个自动,一个手动完美解决事物不回滚现象。