在service层使用声明式事务添加@Transactional(rollbackFor = Exception.class)注解spring
多个方法进行数据库操做,执行失败则隐式的回滚事务,可是已经成功的发方法不会回滚,数据库
想要,全部方法都回滚,须要手动try-catch,进行手动回滚(spring aop 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认状况下aop只捕获runtimeexception的异常)spa
try { a.save(); b.save(); } catch (Exception e) { //方式一:aop捕获RuntimeException异常回滚 throw new RuntimeException(); //方式二: TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); }