SpringBoot整合事務回滾
SpringBoot整合事務回滾
- 一、自動回滾
- 二、手動回滾
一、自動回滾
自動回滾有個前提條件,它一定必須是public的,其次,在它的方法上必須要添加上@Transactional 注解。
在方法或者類上加上注解@Transactional
1.Error一定會回滾。
2.異常中:運行時異常(unchecked exceptions)一定會回滾。而非運行時異常(checked exceptions),如IOExceptions和SQLExceptions不會回滾。
讓checked例外也回滾:在整個方法前加上 @Transactional(rollbackFor=Exception.class)
讓unchecked例外不回滾: @Transactional(noRollbackFor=RunTimeException.class)
注意: 如果異常被try-catch了,事務就不回滾了,必須拋向被@Transactional注解的層。
@Transactional(rollbackFor = Exception.class)//事物回滾
public class InspectionController {@RequestMapping("admin/insert_equipment_inspection")public JsonData insertEquipmentInspection(@RequestBody Map<String, Object> parameter) {try {return inspectionService.insertInspectionEquipmentRecordAndMaintenanceRecord((Integer) parameter.get("inspectionId"), (Integer) parameter.get("equipmentId"), String.valueOf(parameter.get("checkStatus")));} catch (Exception e) {e.printStackTrace();throw e;}}
}
二、手動回滾
手動回滾的唯一條件就是一定要在方法上加入@Transactional注解,它與自動回滾的唯一區別可能就是要用到
public class InspectionController {@RequestMapping("admin/insert_equipment_inspection")public JsonData insertEquipmentInspection(@RequestBody Map<String, Object> parameter) {try {return inspectionService.insertInspectionEquipmentRecordAndMaintenanceRecord((Integer) parameter.get("inspectionId"), (Integer) parameter.get("equipmentId"), String.valueOf(parameter.get("checkStatus")));} catch (Exception e) {e.printStackTrace();//手動回滾TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();return JsonData.buildError("失敗");}}
}
本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處:https://dhexx.cn/hk/18457.html
如若內容造成侵權/違法違規/事實不符,請聯系我的編程經驗分享網進行投訴反饋,一經查實,立即刪除!