Spring聲明式事務不回滾問題

####事務分級別,默認是數據庫相同的事務,如下是默認事務測試結果數據庫

註解 @Transactional 聲明事務函數

  • 內部調用方法不會走代理方式調用,而是類內部的函數調用,有事務註解也不會開啓事務
  • 可是當A有事務調用B時,B會加入A事務中,使之爲同一事務
  • A無事務 ,B有事務。主函數調用A方法,A方法調用B方法,B方法有異常。實驗結果:A,B方法均未回滾測試

  • A有事務 ,B無事務。主函數調用A方法,A方法調用B方法,B方法有異常。實驗結果:A,B方法都回滾了.net

當內部調用方法時,並不會經過代理類調用並開啓事務,與普通方法調用同樣代理

  • 因此當A無事務時,AB均無事務,當A有事務時,B會加入到A事務中兩者同一事務

@Transactional(rollbackFor = Exception.class) blog

  • 必定要加 rollbackFor = Exception.class 參數

下面會說明緣由:事務

  • 具體緣由:當咱們使用@Transaction 時默認爲RuntimeException(也就是運行時異常)異常纔會回滾。
  • 若是你拋出了該異常,也不會回滾

相關文章
相關標籤/搜索