问题 一般情况下 try{}catch{}的使用回使得@Transactional注解失效
可使用如下方式 实现事务回滚
@Transactional(rollbackFor = Throwable.class)
@Override
public DocIstBO savePOIDoc(SaveDocDTO saveDocDTO) {
try{
}catch{
//第一钟方法 手动回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//第二种方法 直接抛出异常 当前线程停止运行 事务回滚
throw CommonException.exception("io error 模板文件不存在");
}
}
@Transactional注解的全部属性详解
属性 | 类型 | 描述 |
value | String | 可选的限定描述符,指定使用的事务管理器 |
propagation | enum: Propagation | 可选的事务传播行为设置 |
isolation | enum: Isolation | 可选的事务隔离级别设置 |
readOnly | boolean | 读写或只读事务,默认读写 |
timeout | int (in seconds granularity) | 事务超时时间设置 |
rollbackFor | Class对象数组,必须继承自Throwable | 导致事务回滚的异常类数组 |
rollbackForClassName | 类名数组,必须继承自Throwable | 导致事务回滚的异常类名字数组 |
noRollbackFor | Class对象数组,必须继承自Throwable | 不会导致事务回滚的异常类数组 |
noRollbackForClassName | 类名数组,必须继承自Throwable | 不会导致事务回滚的异常类名字数组 |