Spring 聲明式事務中常見的坑點

背景

我們在業務代碼中經常使用數據庫的事務,及spring 聲明式事務@Transcational, 但也經常遇到事務不生效的情況,總結起來主要是踩到下面的幾個坑去了。

一、配置不正確

導致方法上的事務沒生效,需要確認@Transctional註解標記的方法必須是public的,並且是通過spring注入的Bean進行調用的,不能在本方法中直接調用。

二、異常處理不正確

導致事務雖然生效,但是出現異常時沒有回滾,spring 默認只會對標記了@Transctional 方法出現RuntimeException和Error 時候進行事務回滾,如果我們的方法補捕獲了異常,那麼我們就需要手動編碼進行事務回滾。如果我們需要對其他的異常也可以回滾,可以通過配置@Transctional 的rollBackFor屬性。

三、配置事務傳播不正確

如果我們的方法涉及多次的數據庫操作,並希望他們可以作爲獨立的事務進行回滾和提交,那麼我們就需要進一步細化配置事務的傳播方式,也就是@Transctional註解的Propagation屬性。在父方法中捕獲子方法的異常,不跟隨子方法的事務回滾,子方法需要配置事務的傳播方式,創建一個新的事務,將父方法的事務掛起。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章