單JVM spring事務傳遞

PROPAGATION_REQUIRED--支持當前事務,若是當前沒有事務,就新建一個事務。這是最多見的選擇。 PROPAGATION_SUPPORTS--支持當前事務,若是當前沒有事務,就以非事務方式執行。 PROPAGATION_MANDATORY--支持當前事務,若是當前沒有事務,就拋出異常。 PROPAGATION_REQUIRES_NEW--新建事務,若是當前存在事務,把當前事務掛起。 PROPAGATION_NOT_SUPPORTED--以非事務方式執行操做,若是當前存在事務,就把當前事務掛起。 PROPAGATION_NEVER--以非事務方式執行,若是當前存在事務,則拋出異常。 PROPAGATION_NESTED--若是當前存在事務,則在嵌套事務內執行。若是當前沒有事務,則進行與PROPAGATION_REQUIRED相似的操做。mysql

事務傳遞迴滾總結spring

單JVM 的sping 事務(spring默認事務: require)sql

總結:主要看有沒有往上拋異常,只要有異常往上拋的事務都不會插入成功,此時事務有效。不往上拋異常,不會知道有異常,插入數據是成功,到時沒有回滾,事務失效。ui

A和B都有事務(A B 同JVM)事務

  • 1,A插入記錄,調用B,B也插入記錄,可是B拋出異常,A不捕獲 。結果,都不成功
  • 2,A插入記錄,調用B,B也插入記錄,可是B拋出異常,A捕獲,不往上拋,A再插入另外一條記錄。結果,都不成功
  • 3,A插入記錄,調用B,B也插入記錄,可是B拋出異常,A捕獲,往上拋。結果,都不成功
  • 4,A插入記錄,調用B,B也插入記錄,B正常,A再插入另外一條記錄,而後再拋出異常。結果,都不成功
  • 5,A插入記錄,調用B,B也插入記錄,可是B拋出異常,又本身捕獲,不往上拋。結果,都插入成功
  • 6,A插入記錄,調用B,B也插入記錄,B正常,可是A再拋出異常,又本身捕獲,不往上拋。結果,都插入成功

A有事務,B無事務(A B 同JVM)require

  • 1,A插入記錄,調用B,B也插入記錄,可是B拋出異常,A不捕獲 。結果,都不成功
  • 2,A插入記錄,調用B,B也插入記錄,可是B拋出異常,A捕獲,不往上拋,A再插入另外一條記錄。結果,都插入成功
  • 3,A插入記錄,調用B,B也插入記錄,可是B拋出異常,A捕獲,往上拋。結果,都不成功
  • 4,A插入記錄,調用B,B也插入記錄,B正常,A再插入另外一條記錄,而後再拋出異常。結果,都不成功
  • 5,A插入記錄,調用B,B也插入記錄,可是B拋出異常,又本身捕獲,不往上拋。結果,都插入成功

A無事務,B有事務(A B 同JVM)總結

  • 1,A插入記錄,調用B,B也插入記錄,可是B拋出異常,A不捕獲 。結果,A成功,B失敗
  • 2,A插入記錄,調用B,B也插入記錄,可是B拋出異常,A捕獲,不往上拋,A再插入另外一條記錄。結果,A成功,B失敗
  • 3,A插入記錄,調用B,B也插入記錄,可是B拋出異常,A捕獲,往上拋。結果,A成功,B失敗
  • 4,A插入記錄,調用B,B也插入記錄,B正常,A再插入另外一條記錄,而後再拋出異常。結果,都插入成功
  • 5,A插入記錄,調用B,B也插入記錄,可是B拋出異常,又本身捕獲,不往上拋。結果,都插入成功

A B同JVM ,C非同JVM ,RPC調用, ABC 操做同一個mysql庫數據

相關文章
相關標籤/搜索