正常情况加上@Transactional注解即可,实现事物回滚。鉴于有些服务接口,已抛出异常的形式校验。若是使用方没有统一拦截异常,又想提示信息比较友好则必须使用try catch() 进行处理。
@Transactional
public Response sendLend(){
try{
baseUserAccountService.insertSelective(10000L,0L);
int i=0;
int a=100/i;
}catch (Exception e){
log.error(e.getMessage(),e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ResponseUtil.getResponse(ResponsCodeTypeEnum.ERROR);
}
return ResponseUtil.getResponse(ResponsCodeTypeEnum.OK);
}
##回滚部分异常,设置回滚点
@Transactional(rollbackFor = Exception.class)
@Override
public void saveX() throws Exception{
Object savePoint = null;
try {
//数据库操作
userDao.saveUser();
//设置回滚点
savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
studentDao.saveStudent();
int a = 10/0; //模拟异常
}catch (Exception e){
log.error(e.getMessage(),e);
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
}
}
DataSourceTransactionManager方式注入两个对象
@Autowired
DataSourceTransactionManager dataSourceTransactionManager;
@Autowired
TransactionDefinition transactionDefinition;
手动开启事务
TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
手动提交事务
dataSourceTransactionManager.commit(transactionStatus);
手动回滚事务
dataSourceTransactionManager.rollback(transactionStatus);
catch 语句块重新抛出(RuntimeException)运行时异常也可以回滚,这就牵扯到若是异常没有统一处理,则返回结构提示信息不友好问题。
记下笔记 标记下。建议可统一处理异常信息
spring mvc 可利用
@ControllerAdvice @ExceptionHandler 注解统一处理
dubbo服务
可使用dubbo过滤器处理
spring 应用也可以使用aop 处理
前提都是出参格式统一结构体。