我們都知道,在數據庫中有這事務的存在,但是更多的時候,我們還會被經常問到這個關于 Spring 中 事務的各種行為,又或者說是傳播機制,或者隔離級別等內容,那么面試的時候我們應該怎么去回答這個 Spring 事務的傳播機制以及隔離級別呢?
事務是邏輯處理原?性的保證?段,通過使?事務控制,可以極?的避免出現邏輯處理失敗導致的臟數 據等問題。
事務最重要的兩個特性,是事務的傳播級別和數據隔離級別。傳播級別定義的是事務的控制范圍,事務 隔離級別定義的是事務在數據庫讀寫??的控制范圍。
Spring默認的事務傳播級別,使?該級別的特點是,如果上下?中 已經存在事務,那么就加?到事務中執?,如果當前上下?中不存在事務,則新建事務執?。所以這個 級別通常能滿?處理?多數的業務場景。
從字?意思就知道,supports,?持,該傳播級別的特點是,如果上下?存在事務,則?持事務加?事務,如果沒有事務,則使??事務的?式執?。所以說,并?所有的包在transactionTemplate.execute中的代碼都會有事務?持。這個通常是?來處理那些并?原?性的?核?業務邏輯操作。應?場景較少。
該級別的事務要求上下?中必須要存在事務,否則就會拋出異常!配置該?式的傳播級別是有效的控制上下?調?代碼遺漏添加事務控制的保證?段。?如?段代碼不能單獨被調?執?,但是?旦被調?,就必須有事務包含的情況,就可以使?這個傳播級別。
從字?即可知道,new,每次都要?個新事務,該傳播級別的特點是,每次都會新建?個事務,并且同時將上下?中的事務掛起,執?當前新建事務完成以后,上下?事務恢復再執?。
這是?個很有?的傳播級別,舉?個應?場景:現在有?個發送100個紅包的操作,在發送之前,要做 ?些系統的初始化、驗證、數據記錄操作,然后發送100封紅包,然后再記錄發送?志,發送?志要求 100%的準確,如果?志不準確,那么整個?事務邏輯需要回滾。
怎么處理整個業務需求呢?就是通過這個PROPAGATION_REQUIRES_NEW 級別的事務傳播控制就可以 完成。發送紅包的?事務不會直接影響到?事務的提交和回滾。
這個也可以從字?得知,not supported ,不?持,當前級別的特點就是上下?中存在事務,則掛起事務,執?當前邏輯,結束后恢復上下?的事務。
這個級別有什么好處?
可以幫助你將事務極可能的縮?。我們知道?個事務越?,它存在的?險也就越多。所以在處理事務的過程中,要保證盡可能的縮?范圍。?如?段代碼,是每次邏輯操作都必須調?的,?如循環1000次的某個?核?業務邏輯操作。這樣的代碼如果包在事務中,勢必造成事務太?,導致出現?些難以考慮周全的異常情況。所以這個事務這個級別的傳播級別就派上?場了。
該事務更嚴格,上??個事務傳播級別只是不?持?已,有事務就掛 起,?PROPAGATION_NEVER傳播級別要求上下?中不能存在事務,?旦有事務,就拋出runtime異 常,強制停?執?!這個級別上輩?跟事務有仇。
字?也可知道,nested,嵌套級別事務。該傳播級別特征是,如果上 下?中存在事務,則嵌套事務執?,如果不存在事務,則新建事務
最嚴格的級別,事務串?執?,資源消耗最?;
保證了?個事務不會修改已經由另?個事務讀取但未提交(回滾)的數據。 避免了“臟讀取”和“不可重復讀取”的情況,但是帶來了更多的性能損失。
?多數主流數據庫的默認事務等級,保證了?個事務不會讀到另?個并?事務 已修改但未提交的數據,避免了“臟讀取”。該級別適?于?多數系統。
保證了讀取過程中不會讀取到?法數據
我們來舉個事務傳播的例子:
假設有一個方法childTest(),它是一個事務方法,使用了PROPAGATION_REQUIRED事務傳播選項。如果在一個事務中調用這個方法,那么它會在同一個事務中執行。
現在假設有一個方法mainTest(),它調用了childTest()方法。如果在mainTest()方法中沒有顯式地聲明事務,而childTest()方法中聲明了事務,那么childTest()方法將在一個新的事務中執行,這個新的事務不會影響mainTest()方法的執行。
但是,如果mainTest()方法也使用了事務傳播選項,例如PROPAGATION_REQUIRED,那么在執行childTest()方法時,它的事務會隱式地與mainTest()方法的事務關聯。這意味著如果childTest()方法的事務成功,則mainTest()方法的事務也會成功;如果childTest()方法的事務失敗,則mainTest()方法的事務也會失敗。
關于 Spring 的事務,你了解了么?
本文鏈接:http://www.tebozhan.com/showinfo-26-15748-0.htmlSpring事務的傳播機制
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
下一篇: 為什么 IT 項目仍然失敗