網(wǎng)站首頁(yè) 編程語言 正文
Spring的隔離級(jí)別&事務(wù)傳播屬性&數(shù)據(jù)庫(kù)隔離級(jí)別之間的聯(lián)系
作者:洋洋洋coding 更新時(shí)間: 2022-07-16 編程語言一、Spring五大事務(wù)隔離級(jí)別
Spring事務(wù)隔離級(jí)別比數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別多一個(gè)default
在進(jìn)行配置的時(shí)候,如果數(shù)據(jù)庫(kù)和spring代碼中的隔離級(jí)別不同,那么以spring的配置為主。
1) DEFAULT (默認(rèn))
這是一個(gè)PlatfromTransactionManager默認(rèn)的隔離級(jí)別,使用數(shù)據(jù)庫(kù)默認(rèn)的事務(wù)隔離級(jí)別。另外四個(gè)與MySQL的隔離級(jí)別相對(duì)應(yīng)。
2) READ_UNCOMMITTED (讀未提交)
這是事務(wù)最低的隔離級(jí)別,它允許另外一個(gè)事務(wù)可以看到這個(gè)事務(wù)未提交的數(shù)據(jù)。這種隔離級(jí)別會(huì)產(chǎn)生臟讀,不可重復(fù)讀和幻像讀。
3) READ_COMMITTED (讀已提交)
保證一個(gè)事務(wù)修改的數(shù)據(jù)提交后才能被另外一個(gè)事務(wù)讀取,另外一個(gè)事務(wù)不能讀取該事務(wù)未提交的數(shù)據(jù)。這種事務(wù)隔離級(jí)別可以避免臟讀出現(xiàn),
但是可能會(huì)出現(xiàn)不可重復(fù)讀和幻讀。
4) REPEATABLE_READ (可重復(fù)讀)
這種事務(wù)隔離級(jí)別可以防止臟讀、不可重復(fù)讀,但是可能出現(xiàn)幻讀。它除了保證一個(gè)事務(wù)不能讀取另一個(gè)事務(wù)未提交的數(shù)據(jù)外,
還保證了不可重復(fù)讀。
5) SERIALIZABLE(串行化)
這是花費(fèi)最高代價(jià)但是最可靠的事務(wù)隔離級(jí)別,事務(wù)被處理為順序執(zhí)行。除了防止臟讀、不可重復(fù)讀外,還避免了幻讀。
隔離級(jí)別越高,越能保證數(shù)據(jù)的完整性和一致性,但是對(duì)并發(fā)性能的影響也越大。對(duì)于多數(shù)應(yīng)用程序,可以優(yōu)先考慮把數(shù)據(jù)庫(kù)系統(tǒng)的
隔離級(jí)別設(shè)為Read Committed。它能夠避免臟讀取,而且具有較好的并發(fā)性能。盡管它會(huì)導(dǎo)致不可重復(fù)讀、幻讀和第二類丟失更新
這些并發(fā)問題,在可能出現(xiàn)這類問題的個(gè)別場(chǎng)合,可以由應(yīng)用程序采用悲觀鎖或樂觀鎖來控制。
二、Spring七大事務(wù)傳播屬性
1) required(默認(rèn)屬性)
如果存在一個(gè)事務(wù),則支持當(dāng)前事務(wù)。如果沒有事務(wù)則開啟一個(gè)新的事務(wù)。
被設(shè)置成這個(gè)級(jí)別時(shí),會(huì)為每一個(gè)被調(diào)用的方法創(chuàng)建一個(gè)邏輯事務(wù)域。如果前面的方法已經(jīng)創(chuàng)建了事務(wù),那么后面的方法支持當(dāng)前的事務(wù),
如果當(dāng)前沒有事務(wù)會(huì)重新建立事務(wù)。
2) Mandatory
支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就拋出異常。
3) Never
以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。
4) Not_supports
以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。
5) requires_new
新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起。
6) Supports
支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù)方式執(zhí)行。
7) Nested
支持當(dāng)前事務(wù),新增Savepoint點(diǎn),與當(dāng)前事務(wù)同步提交或回滾。
嵌套事務(wù)一個(gè)非常重要的概念就是內(nèi)層事務(wù)依賴于外層事務(wù)。外層事務(wù)失敗時(shí),會(huì)回滾內(nèi)層事務(wù)所做的動(dòng)作。而內(nèi)層事務(wù)操作失敗并不會(huì)引起外層事務(wù)的回滾。
三、Spring隔離級(jí)別與數(shù)據(jù)庫(kù)隔離級(jí)別聯(lián)系
spring事務(wù)本質(zhì)上使用數(shù)據(jù)庫(kù)事務(wù),而數(shù)據(jù)庫(kù)事務(wù)本質(zhì)上使用數(shù)據(jù)庫(kù)鎖,所以spring事務(wù)本質(zhì)上使用數(shù)據(jù)庫(kù)鎖,開啟spring事務(wù)意味著使用數(shù)據(jù)庫(kù)鎖;
事務(wù)的隔離級(jí)別是通過鎖的機(jī)制實(shí)現(xiàn)的,事務(wù)的隔離級(jí)別是數(shù)據(jù)庫(kù)開發(fā)商根據(jù)業(yè)務(wù)邏輯的實(shí)際需要定義的一組鎖的使用策略。
當(dāng)我們將數(shù)據(jù)庫(kù)的隔離級(jí)別定義為某一級(jí)別后如仍不能滿足要求,我們可以自定義 sql 的鎖來覆蓋事務(wù)隔離級(jí)別默認(rèn)的鎖機(jī)制。
spring事務(wù)實(shí)際使用AOP攔截注解方法,然后使用動(dòng)態(tài)代理處理事務(wù)方法,捕獲處理過程中的異常,spring事務(wù)其實(shí)是把異常交給spring處理;
spring事務(wù)只有捕獲到異常才會(huì)終止或回滾,如果你在程序中try/catch后自己處理異常而沒有throw,那么事務(wù)將不會(huì)終止或回滾,
失去事務(wù)本來的作用;
spring事務(wù)會(huì)捕獲所有的異常,但只會(huì)回滾數(shù)據(jù)庫(kù)相關(guān)的操作,并且只有在聲明了rollbackForClassName="Exception"之類的配置才會(huì)回滾。
spring事務(wù)會(huì)回滾同一事務(wù)中的所有數(shù)據(jù)庫(kù)操作,本質(zhì)上是回滾同一數(shù)據(jù)庫(kù)連接上的數(shù)據(jù)庫(kù)操作。
原文鏈接:https://blog.csdn.net/weixin_56311692/article/details/125774279
相關(guān)推薦
- 2022-07-26 pyspark 中dataframe 按指定字段拆分為多列或者多行
- 2022-12-30 解決React報(bào)錯(cuò)The?tag?is?unrecognized?in?this?browser_R
- 2022-04-25 C#關(guān)于Func和Action委托的介紹詳解_C#教程
- 2022-08-17 C++詳解鏈棧的實(shí)現(xiàn)_C 語言
- 2023-01-30 Numpy?np.array()函數(shù)使用方法指南_python
- 2021-12-04 Qt下監(jiān)測(cè)內(nèi)存泄漏的方法_C 語言
- 2022-11-19 Golang接口使用教程詳解_Golang
- 2022-06-17 C#使用讀寫鎖解決多線程并發(fā)問題_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支