Spring學(xué)習(xí)之事務(wù)管理基礎(chǔ)
數(shù)據(jù)庫事務(wù)相關(guān)概念
事務(wù)的定義
- 事務(wù)拍柒,一般指的是數(shù)據(jù)庫事務(wù),是指數(shù)據(jù)庫操作的時(shí)候,多個(gè)執(zhí)行語句之間是一個(gè)邏輯上的整體史隆,也就是說,這些操作之間要么都執(zhí)行曼验,要么就都不執(zhí)行
事務(wù)的特性
- 事務(wù)有四大特性:分別是原子性(Atomic)泌射、一致性(Consistency)、隔離性(Isolation)鬓照、持久性(Durabily)熔酷,簡(jiǎn)稱 ACID
- 原子性:原子性指的是組成事務(wù)的各個(gè)操作是一個(gè)整體,也就是一個(gè)原子單元豺裆,不可分割
- 一致性:一致性指的是事務(wù)執(zhí)行前后拒秘,系統(tǒng)的狀態(tài)應(yīng)該處于一致的情況,比如說轉(zhuǎn)賬事務(wù)臭猜,轉(zhuǎn)賬前后兩個(gè)賬號(hào)的金額總和應(yīng)當(dāng)保持一致
- 隔離性:隔離性是指在并發(fā)操作數(shù)據(jù)庫的時(shí)候躺酒,不同的事務(wù)之間擁有不同的數(shù)據(jù)空間,不會(huì)被其他事務(wù)干擾蔑歌,根據(jù)不同的需要羹应,有不同的隔離級(jí)別
- 持久性:持久性是指一旦事務(wù)提交了,那么在邏輯上來說次屠,數(shù)據(jù)就應(yīng)當(dāng)是被持久化了园匹,此時(shí)即使發(fā)生故障或者其他原因雳刺,可以通過日志等其他手段進(jìn)行恢復(fù)
- 事務(wù)的四個(gè)特性之間是有著必然的關(guān)系的,一致性是最終的目的裸违,原子性掖桦、隔離性以及持久性是為了保證一致性而進(jìn)行的必要條件
沒有進(jìn)行隔離會(huì)出現(xiàn)的問題
- 如果事務(wù)的執(zhí)行過程中沒有進(jìn)行相應(yīng)的隔離,那么在事務(wù)并發(fā)操作的時(shí)候供汛,會(huì)出現(xiàn)讀寫問題(三類讀問題枪汪,兩類丟失更新問題)
- 三類讀問題
- 臟讀:臟讀是指事務(wù)A讀取到事務(wù)B還沒有提交的數(shù)據(jù),此時(shí)如果事務(wù)B進(jìn)行回滾紊馏,則導(dǎo)致事務(wù)A所讀取到的數(shù)據(jù)是無效的
- 不可重復(fù)讀:不可重復(fù)讀是指事務(wù)A第一次讀取之后料饥,事務(wù)B修改了數(shù)據(jù),并且進(jìn)行了提交朱监,此時(shí)事務(wù)A進(jìn)行第二次讀取岸啡,發(fā)現(xiàn)前后讀取的數(shù)據(jù)不一致(注意這里是指修改數(shù)據(jù)而不是增加或者刪除數(shù)據(jù),屬于行級(jí)別)
- 幻象讀:幻象讀是指事務(wù)A第一次讀取之后赫编,事務(wù)B增加或者減少了數(shù)據(jù)記錄巡蘸,并且進(jìn)行了提交,此時(shí)事務(wù)A進(jìn)行第二次讀取擂送,發(fā)現(xiàn)前后讀取的數(shù)據(jù)記錄不一致(注意這里指的是增加或者減少數(shù)據(jù)記錄而不是修改數(shù)據(jù)本身悦荒,屬于表級(jí)別)
- 兩類更新問題
- 第一類丟失更新問題:事務(wù)A回滾時(shí),把事務(wù)B已經(jīng)更新并且提交的數(shù)據(jù)撤銷了嘹吨,導(dǎo)致事務(wù)B所做的操作失效
- 第二類丟失更新問題:事務(wù)A提交時(shí)搬味,把事務(wù)B已經(jīng)更新并且提交的數(shù)據(jù)覆蓋了,導(dǎo)致事務(wù)B所做的操作失效
數(shù)據(jù)庫鎖機(jī)制
- 按照對(duì)象區(qū)分:行級(jí)鎖蟀拷、表級(jí)鎖
- 并發(fā)事務(wù)鎖定的關(guān)系:共享鎖碰纬、獨(dú)占鎖
- 共享鎖會(huì)防止獨(dú)占鎖,但允許其他共享鎖问芬,但是獨(dú)占鎖兩者都不允許
事務(wù)隔離級(jí)別
- 一般來說悦析,由于手動(dòng)對(duì)事務(wù)的并發(fā)進(jìn)行控制是非常難的事情,所以一般的數(shù)據(jù)庫都提供了相應(yīng)的自動(dòng)鎖機(jī)制此衅,使用者只需要指定對(duì)應(yīng)的事務(wù)隔離級(jí)別
- 四種隔離級(jí)別
- READ_UNCOMMIT
- READ_COMMIT
- REPEATABLE_READ
- SERIALIZABLE
-
四種隔離級(jí)別對(duì)應(yīng)含義以及范圍如下所示
事務(wù)四種隔離級(jí)別以及對(duì)應(yīng)的范圍 - 數(shù)據(jù)庫的隔離級(jí)別越高强戴,對(duì)應(yīng)的并發(fā)性能就越低,所以在選擇的時(shí)候需要兼顧兩者挡鞍,一般采用的級(jí)別為REPEATABLE_READ也就是可重復(fù)讀級(jí)別
Spring事務(wù)管理(Service Provider Interface)
Spring為事務(wù)管理定義了三個(gè)主要接口
- PlatformTranscationManager:根據(jù)TransactionDefinition提供的事務(wù)屬性配置信息創(chuàng)建事務(wù)骑歹,并使用TranscationStatus描述事務(wù)的狀態(tài)
- 操作方法:getTransaction、commit墨微、rollback
- 實(shí)現(xiàn)類:JpaTransactionManager陵刹、HibernateTransactionManger、DataSourceTransactionmanager、JdoTranscationManager衰琐、JtaTransactionManager
- TransactionDefinition:描述 隔離級(jí)別、超時(shí)時(shí)間炼蹦、是否為只讀事務(wù)以及事務(wù)的傳播規(guī)則
- 事務(wù)隔離級(jí)別
- ISOLATION_DEFAULT:采用底層數(shù)據(jù)庫默認(rèn)的隔離級(jí)別
- ISOLATION_READ_UNCOMMIT
- ISOLATION_READ_COMMIT
- ISOLATION_REPEATABLE_READ
- ISOLATION_SERIALIZABLE
- 事務(wù)隔離級(jí)別
- TransactionStatus: 代表一個(gè)事務(wù)的具體運(yùn)行狀態(tài)
- SavePointMange:createSavePoint羡宙、rollbackToSavepoint、releaseSavePoint
- 方法:hasSavepoint掐隐、isNewTransaction狗热、isCompleted、isRollbackOnly虑省、setRollbackOnly
Spring配置事務(wù)管理的主要步驟
- 配置數(shù)據(jù)源
- 配置事務(wù)管理器匿刮,并且指定其他的事務(wù)控制屬性
- 將數(shù)據(jù)源注入到事務(wù)管理器中,將事務(wù)管理交給Spring
事務(wù)傳播行為
產(chǎn)生事務(wù)傳播行為原因:一般情況是探颈,事務(wù)管理是配置在Service層中熟丸,一般同一個(gè)方法處于同一個(gè)一個(gè)事務(wù)中,但是如果此時(shí)在一個(gè)Service的方法中調(diào)用另外一個(gè)Service中的方法的時(shí)候伪节,就會(huì)出現(xiàn)兩個(gè)事務(wù)交叉的情況光羞,此時(shí)有不同的處理方式
事務(wù)傳播行為類型及說明
總結(jié)
本小節(jié)主要學(xué)習(xí)了事務(wù)管理的基本概念、事務(wù)的四大特性以及事務(wù)的傳播行為,接下來將學(xué)習(xí)如何使用Spring進(jìn)行事務(wù)管理