我們都喜歡在方法上面加上 @Transactional 註解的方式來實現事務,但是事物回滾是當代碼發生異常並拋出來的時候,纔會主動觸發事物回滾,但是有的時候,我們希望滿足某個條件就觸發事物的回滾操作(如:某一張表數據更新未能成功更新),這種情況下要如何做?這裏記錄兩種方案:
前提:在方法上面加上:@Transactional 註解
1、手動拋出一個異常:throw new RuntimeException();
2、通過方法回滾:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
特別說明:當在方法內部如果加了 try {} catch() {} 時,是不會主動觸發事務,這個時候就需要再catch 代碼塊中主動回滾事務或者繼續拋出一個異常。如以下代碼:
@Transaction
public String methodName() {
try {
// 邏輯代碼
} catch(Exception e) {
// 當上面的方法發生異常時
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
e.printStackTrace();
}
}