問題 一般情況下 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 | 不會導致事務回滾的異常類名字數組 |