Spring事務需要注意的幾個點

哲大大發表於2020-01-02

關於事務我的頭腦裡總是縈繞著三點

  • 一是,我的事務是否開啟。
  • 二是,事務的傳播行為,如果有新的事務加入spring會怎麼處理。
  • 三是,如果一個沒有事務的方法調有事務的方法,有事務的方法會被事務包含嗎。

第一個問題:

    在Spring Boot中,只要是Service裡面的公共方法,只要新增@Transaction註解,即會被納入Spring事務管理。資料庫層面的事務會被DataSourceTransactionManager類所管理。debug除錯可以在doBegin、doCommit、doRollback方法新增斷點觀察其是否執行。

第二個問題:

    事務的傳播行為,如果是預設的,即只新增@Transaction註解,而不修改其屬性,則呼叫另一個被這個註解修飾的方法,則不會開啟新事務,而是加入舊的事務,待主方法執行完,則提交全部修改。

第三個問題:

    如果一個沒有被@Transaction註解修飾的方法調被@Transaction註解修飾的方法。被呼叫方法依然會被事務增強。原因是呼叫者呼叫的不是原始方法,而是呼叫的spring動態代理生成之後的方法。如果是本類之間的呼叫,則動態代理失效,被呼叫的方法不會被事務包含。

相關文章