成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring事務的傳播機制

開發 前端
假設有一個方法childTest()?,它是一個事務方法,使用了PROPAGATION_REQUIRED事務傳播選項。如果在一個事務中調用這個方法,那么它會在同一個事務中執行。

我們都知道,在數據庫中有這事務的存在,但是更多的時候,我們還會被經常問到這個關于 Spring 中 事務的各種行為,又或者說是傳播機制,或者隔離級別等內容,那么面試的時候我們應該怎么去回答這個 Spring 事務的傳播機制以及隔離級別呢?

什么是 Spring 的事務

事務是邏輯處理原?性的保證?段,通過使?事務控制,可以極?的避免出現邏輯處理失敗導致的臟數 據等問題。

事務最重要的兩個特性,是事務的傳播級別和數據隔離級別。傳播級別定義的是事務的控制范圍,事務 隔離級別定義的是事務在數據庫讀寫??的控制范圍。

Spring事務傳播機制

PROPAGATION_REQUIRED

Spring默認的事務傳播級別,使?該級別的特點是,如果上下?中 已經存在事務,那么就加?到事務中執?,如果當前上下?中不存在事務,則新建事務執?。所以這個 級別通常能滿?處理?多數的業務場景。

PROPAGATION_SUPPORTS

從字?意思就知道,supports,?持,該傳播級別的特點是,如果上下?存在事務,則?持事務加?事務,如果沒有事務,則使??事務的?式執?。所以說,并?所有的包在transactionTemplate.execute中的代碼都會有事務?持。這個通常是?來處理那些并?原?性的?核?業務邏輯操作。應?場景較少。

PROPAGATION_MANDATORY

該級別的事務要求上下?中必須要存在事務,否則就會拋出異常!配置該?式的傳播級別是有效的控制上下?調?代碼遺漏添加事務控制的保證?段。?如?段代碼不能單獨被調?執?,但是?旦被調?,就必須有事務包含的情況,就可以使?這個傳播級別。

PROPAGATION_REQUIRES_NEW

從字?即可知道,new,每次都要?個新事務,該傳播級別的特點是,每次都會新建?個事務,并且同時將上下?中的事務掛起,執?當前新建事務完成以后,上下?事務恢復再執?。

這是?個很有?的傳播級別,舉?個應?場景:現在有?個發送100個紅包的操作,在發送之前,要做 ?些系統的初始化、驗證、數據記錄操作,然后發送100封紅包,然后再記錄發送?志,發送?志要求 100%的準確,如果?志不準確,那么整個?事務邏輯需要回滾。

怎么處理整個業務需求呢?就是通過這個PROPAGATION_REQUIRES_NEW 級別的事務傳播控制就可以 完成。發送紅包的?事務不會直接影響到?事務的提交和回滾。

PROPAGATION_NOT_SUPPORTED

這個也可以從字?得知,not supported ,不?持,當前級別的特點就是上下?中存在事務,則掛起事務,執?當前邏輯,結束后恢復上下?的事務。

這個級別有什么好處?

可以幫助你將事務極可能的縮?。我們知道?個事務越?,它存在的?險也就越多。所以在處理事務的過程中,要保證盡可能的縮?范圍。?如?段代碼,是每次邏輯操作都必須調?的,?如循環1000次的某個?核?業務邏輯操作。這樣的代碼如果包在事務中,勢必造成事務太?,導致出現?些難以考慮周全的異常情況。所以這個事務這個級別的傳播級別就派上?場了。

PROPAGATION_NEVER

該事務更嚴格,上??個事務傳播級別只是不?持?已,有事務就掛 起,?PROPAGATION_NEVER傳播級別要求上下?中不能存在事務,?旦有事務,就拋出runtime異 常,強制停?執?!這個級別上輩?跟事務有仇。

PROPAGATION_NESTED

字?也可知道,nested,嵌套級別事務。該傳播級別特征是,如果上 下?中存在事務,則嵌套事務執?,如果不存在事務,則新建事務

Spring 事務隔離級別

Serializable

最嚴格的級別,事務串?執?,資源消耗最?;

REPEATABLE READ

保證了?個事務不會修改已經由另?個事務讀取但未提交(回滾)的數據。 避免了“臟讀取”和“不可重復讀取”的情況,但是帶來了更多的性能損失。

READ COMMITTED

?多數主流數據庫的默認事務等級,保證了?個事務不會讀到另?個并?事務 已修改但未提交的數據,避免了“臟讀取”。該級別適?于?多數系統。

Read Uncommitted

保證了讀取過程中不會讀取到?法數據

我們來舉個事務傳播的例子:

假設有一個方法childTest(),它是一個事務方法,使用了PROPAGATION_REQUIRED事務傳播選項。如果在一個事務中調用這個方法,那么它會在同一個事務中執行。

現在假設有一個方法mainTest(),它調用了childTest()方法。如果在mainTest()方法中沒有顯式地聲明事務,而childTest()方法中聲明了事務,那么childTest()方法將在一個新的事務中執行,這個新的事務不會影響mainTest()方法的執行。

但是,如果mainTest()方法也使用了事務傳播選項,例如PROPAGATION_REQUIRED,那么在執行childTest()方法時,它的事務會隱式地與mainTest()方法的事務關聯。這意味著如果childTest()方法的事務成功,則mainTest()方法的事務也會成功;如果childTest()方法的事務失敗,則mainTest()方法的事務也會失敗。

關于 Spring 的事務,你了解了么?

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2022-09-27 21:14:54

Spring事務傳播機制

2023-11-02 07:52:30

Java工具

2022-08-27 14:14:06

Spring事務開發

2024-12-17 16:26:31

2024-01-04 12:48:00

Spring

2020-07-17 08:07:54

Spring數據庫事務

2020-08-19 09:45:29

Spring數據庫代碼

2024-04-03 08:47:49

隧道傳播WPF冒泡傳播

2009-09-25 12:59:53

Hibernate事務

2022-10-09 20:52:19

事務隔離級別傳播機制

2023-05-06 07:29:49

Spring事務傳播

2021-07-12 10:37:42

Spring面試事務

2009-12-22 15:55:10

WCF事務

2021-09-02 18:39:01

Spring隔離級別

2019-10-25 16:12:35

Spring傳播屬性數據庫

2022-09-15 10:47:19

數據庫事務工作單元

2021-10-26 16:15:26

Spring 事務隔離性

2009-06-30 16:57:42

Spring事務管理

2024-12-17 16:44:22

Spring開發

2025-05-07 00:20:00

@AsyncSpring事務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜精品久久久久久 | 精品videossex高潮汇编 | 在线观看亚洲精品视频 | 亚洲电影一区二区三区 | 91亚洲国产成人精品一区二三 | 热久色| 成人欧美一区二区三区在线播放 | 91视频网 | 天堂一区二区三区四区 | 草久久| 成人av一区二区三区 | 操操日 | 国产良家自拍 | 欧美啊v在线观看 | 97视频在线观看网站 | 久久久蜜桃 | 成人免费网站www网站高清 | 日韩精品久久久 | 久久久精品影院 | 91精品久久久久久久久中文字幕 | 538在线精品 | 91精品国产91久久久久久丝袜 | 免费国产成人av | 国内毛片毛片毛片毛片 | 久久天堂网| 日韩一区二区三区在线 | 最新国产精品精品视频 | 操操日 | 97国产超碰 | 亚洲成人二区 | 五月婷婷婷 | 69热视频在线观看 | 伊人春色成人网 | 精品视频一区二区三区 | 成人在线观看免费视频 | 91人人看 | 国产综合久久 | 天天天天天天天干 | 亚洲精品一区二区在线观看 | 日本欧美国产 | 五月婷婷丁香婷婷 |