加小編微信(cxycode) 備注:加群 邀請加入程序員技術(shù)群 機器人自動邀請的 Spring系列圖書推薦:(文末贈書活動,,不要錯過了)Spring其中一個強大之處在于,他是支持聲明式事務的,。而用好聲明式事務的前提是,,要理解Spring的事務傳播機制。本文詳細介紹了Spring事務傳播機制,。 Spring的事務傳播類型 Spring的事務傳播機制類型定義在了Propagation枚舉類中,。主要有以下幾種類型。 public enum Propagation { PROPAGATION_REQUIREDPROPAGATION_REQUIRED表示加入當前正要執(zhí)行的事務不在另外一個事務中,,那么就開啟一個新的事務,。 例如,ServiceB.methodB()的事務級別定義為PROPAGATION_REQUIRED, 那么由于執(zhí)行ServiceA.methodA()時,,ServiceA.methodA()已經(jīng)開啟了事務,,這時調(diào)用ServiceB.methodB(),ServiceB.methodB()看到自己已經(jīng)運行在ServiceA.methodA()的事務內(nèi)部,,就不再開啟新的事務,。而假如ServiceA.methodA()運行時發(fā)現(xiàn)自己沒有在事務中,它就會為自己分配一個事務,。 這樣,,在ServiceA.methodA()或在ServiceB.methodB()內(nèi)的任何地方出現(xiàn)異常,事務都會被回滾,。 即使ServiceB.methodB()的事務已經(jīng)被提交,,ServiceA.methodA()在下面異常了要回滾,那么ServiceB.methodB()也會回滾,。 PROPAGATION_REQUIRED類型的事務處理流程 PROPAGATION_REQUIRES_NEW例如,,定義ServiceA.methodA()的事務級別為PROPAGATION_REQUIRED,ServiceB.methodB()的事務級別為PROPAGATION_REQUIRES_NEW,,那么當執(zhí)行到 ServiceB.methodB()的時候,,ServiceA.methodA()所在的事務就會掛起,ServiceB.methodB()會開啟一個新的事務。等ServiceB.methodB的事務完成以后,,ServiceA.methodA()才繼續(xù)執(zhí)行,。它與PROPAGATION_REQUIRED的事務區(qū)別在于,事務的回滾程度,。因為ServiceB.methodB()是新開啟一個事務,,那么就 是存在兩個不同的事務。如果ServiceB.methodB()已經(jīng)提交,,那么ServiceA.methodA()失敗回滾,,ServiceB.methodB()是不會回滾的。如果ServiceB.methodB()失敗回滾,,如果它拋出的異常被ServiceA.methodA()捕獲,,ServiceA.methodA()事務仍然可能提交。 PROPAGATION_REQUIRES_NEW類型的事務處理流程 PROPAGATION_NESTEDPROPAGATION_NESTED使用具有可回滾到的多個保存點的單個物理事務,。PROPAGATION_NESTED與PROPAGATION_REQUIRES_NEW的區(qū)別是,,PROPAGATION_REQUIRES_NEW 另開啟一個事務,將會與它的父事務相互獨立,,而PROPAGATION_NESTED的事務和它的父事務是相依的,,它的提交要和它的父事務一起。也就是說,,如果父事務最后回滾,,它也要回滾。如果子事務回滾或提交,,不會導致父事務回滾或提交,但父事務回滾將導致子事務回滾,。 PROPAGATION_NESTED類型的事務處理流程 以上文章均摘自北京大學出版社出版社出版的新書《spring5 開發(fā)大全》,,作者柳偉衛(wèi)。關(guān)于spring的教程圖書,,在市面上一直有“spring三劍客在手,,天下無憂”之說,指的就是本書以及《spring boot 企業(yè)級應用開發(fā)實戰(zhàn)》《spring cloud微服務架構(gòu)開發(fā)實戰(zhàn)》,。 好了,,上面是技術(shù)文,說了這么多,,重點來了,,本次北大出版社贊助了六本書,下文介紹的Spring三劍客都各自2本 ,。 書籍簡介介紹完了,,下面是本次活動的重點活動截止時間:2018年12月23號晚上9點整 |
|