Spring宣告式事務手動回滾方案

2021-08-14 16:32:50 字數 701 閱讀 1570

spring的事務一般分為宣告式事務(或叫註解式事務)和程式設計式事務,程式設計式事務比較靈活,可以將事務的粒度控制的更細,並且可以控制何時提交,哪種情況回滾。而宣告式事務使用@transactional註解,使用起來沒有那麼靈活,但是對業務**沒有入侵,而且本身支援一些異常情況下的回滾。但是這個異常是不可以捕獲的,如果**裡捕獲了,那麼事務中已經執行了的部分會提交。**如下:

@transactional(rollbackfor = exception.class)

public boolean update() catch (exception e)

return boolean.true;

}

操作a成功,b丟擲異常,但是被catch住並處理,這樣異常並沒有丟擲來,而spring的宣告式事務是基於aop的,所以也就認為這段操作沒有異常,雖然返回的失敗,但是a操作已經被提交。那麼如果想要自己控制異常的時候的返回結果,由希望事務回滾要怎麼操作呢?其實只要加一段**就可以,上面的catch語句中修改為如下:

log.error("事務失敗", e);

transactionaspectsupport.currenttransactionstatus().setrollbackonly();

return boolean.false;

加上一段**,就可以將事務回滾。

spring手動回滾事務

1.在開發中通過 transaction註解進行事務控制,如果當前方法丟擲異常則自動回滾事務 transactional public void addbook book book 2.如果方法中人為捕獲了異常並且沒有丟擲異常則spring不會自動回滾 transactional public vo...

事務回滾與手動回滾

一般我們在開發時,在方法或者類上加了 transactional事務註解,然後會用 try catch 將可能會出問題的 塊包起來,在catch裡面處理捕獲的異常,但是,如果在catch裡面沒有把異常丟擲去,此時事務是不會自動回滾的 比如這種情況 這裡既沒有丟擲異常,也沒有手動回滾,在插入流水表之後...

宣告式事務 事務回滾的實現

事務回滾 比如乙個部門裡面有很多成員,這兩者分別儲存在部門表和成員表裡面,在刪除某個部門的時候,假設我們預設刪除對應的成員。但是在執行的時候可能會出現這種情況,我們先刪除部門,再刪除成員,但是部門刪除成功了,刪除成員的時候出異常了。這時候我們希望如果成員刪除失敗了,之前刪除的部門也取消刪除。這種場景...