1. 程式人生 > >spring的事務自己再理解的,required,new,nested

spring的事務自己再理解的,required,new,nested

先假設A是大方法,B是小方法

required,A沒有事務時呼叫B方法(B的事務隔離級別是required),B就會開啟自己單獨的事務,B要回滾的話,也是回滾B。A有事務時,B就加入到A這個事務(B不開啟自己的事務了),這裡發生回滾的話,AB的事務就都被回滾了。

new , A沒有事務時呼叫B方法(B的事務隔離級別是new),B就會開啟自己單獨的事務,B要回滾的話,也是回滾B。A有事務時,B還是會開啟自己的事務,B事務發生回滾時,AB事務都會一起回滾,但是當執行了B事務時,A事務時掛起的,當執行完B事務且commit成功後,B事務結束,A事務恢復,若此時A事務發生回滾,那只是A事務回滾,不影響B事務的提交了。

nested,A沒有事務呼叫B方法時(B的事務隔離級別是new),此時就相當於是required了。A有事務時,B事務也開啟,但B事務此時是相當於A事務的巢狀子事務(不是太懂,意思是執行B時A不掛起??),B事務發生回滾時,會回到B事務開啟執行時的savepoint(儲存點),此時B事務已經結束了,然後繼續從B事務開始時的儲存點開始,繼續A事務。如果期間B事務沒回滾,那B事務的提交也是要和A事務一起提交,而且此時B事務沒回滾執行完之後,但A事務出現回滾,AB事務就沒法提交,那就都回滾了(這就是巢狀子事務的概念吧?)