教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Spring如何管理事務(wù)以及隔離級別?【面試題解析】

更新時間:2020年11月30日16時08分 來源:傳智教育 瀏覽次數(shù):

Spring如何管理事務(wù)以及隔離級別?

(1)問題分析:

主要考察事務(wù)的4種隔離級別,如何使用spring進行事務(wù)管理及聲明式事務(wù)管理

(2)核心問題講解:

數(shù)據(jù)隔離級別分為不同的四種:

如果不考慮事務(wù)的隔離性,引發(fā)一些安全性問題:

1) 臟讀: 一個事務(wù)讀到另一個事務(wù)還沒有提交的數(shù)據(jù)。

不可重復(fù)讀: 一個事務(wù)讀到了另一個事務(wù)已經(jīng)提交的update的數(shù)據(jù),導(dǎo)致在當(dāng)前的事務(wù)中多次查詢結(jié)果不一致。

2) 虛讀/幻讀: 一個事務(wù)讀到另一個事務(wù)已經(jīng)提交的insert的數(shù)據(jù),導(dǎo)致在當(dāng)前的事務(wù)中多次的查詢結(jié)果不一致。

3) read uncommitted:未提交讀。臟讀,不可重復(fù)讀,虛讀都可能發(fā)生。

4) read committed:已提交讀.避免臟讀.但是不可重復(fù)讀和虛讀有可能發(fā)生。

5) repeatable read:可重復(fù)讀.避免臟讀,不可重復(fù)讀.但是虛讀有可能發(fā)生。

6) serializable:串行化的.避免臟讀,不可重復(fù)讀,虛讀的發(fā)生。

級別超高,越安全,效率越低。

Spring的事務(wù)機制包括聲明式事務(wù)和編程式事務(wù):

1) 編程式事務(wù)管理:Spring推薦使用TransactionTemplate,實際開發(fā)中使用聲明式事務(wù)較多。

2) 聲明式事務(wù)管理:將我們從復(fù)雜的事務(wù)處理中解脫出來,獲取連接,關(guān)閉連接、事務(wù)提交、回滾、異常處理等這些操作都不用我們處理了,Spring都會幫我們處理。

3) 聲明式事務(wù)管理使用了AOP面向切面編程實現(xiàn)的,本質(zhì)就是在目標(biāo)方法執(zhí)行前后進行攔截。在目標(biāo)方法執(zhí)行前加入或創(chuàng)建一個事務(wù),在執(zhí)行方法執(zhí)行后,根據(jù)實際情況選擇提交或是回滾事務(wù)。


(3)問題擴展

Spring的事務(wù)管理器

Spring并不直接管理事務(wù),而是提供了多種事務(wù)管理器,它們將事務(wù)管理的職責(zé)委托給JTA或其他持久化機制所提供的平臺相關(guān)的事務(wù)實現(xiàn)。每個事務(wù)管理器都會充當(dāng)某一特定平臺的事務(wù)實現(xiàn)的門面,這使得用戶在Spring中使用事務(wù)時,幾乎不用關(guān)注實際的事務(wù)實現(xiàn)是什么。

Spring事務(wù)的只讀

“只讀事務(wù)”并不是一個強制選項,它只是一個“暗示”,提示數(shù)據(jù)庫驅(qū)動程序和數(shù)據(jù)庫系統(tǒng),這個事務(wù)并不包含更改數(shù)據(jù)的操作,那么JDBC驅(qū)動程序和數(shù)據(jù)庫就有可能根據(jù)這種情況對該事務(wù)進行一些特定的優(yōu)化,比方說不安排相應(yīng)的數(shù)據(jù)庫鎖,以減輕事務(wù)對數(shù)據(jù)庫的壓力,畢竟事務(wù)也是要消耗數(shù)據(jù)庫的資源的。“只讀事務(wù)”僅僅是一個性能優(yōu)化的推薦配置而已,并非強制你要這樣做不可。

Spring事務(wù)的事務(wù)超時

為了使應(yīng)用程序更好的運行,事務(wù)不能運行太長的時間。因此,聲明式事務(wù)的第四個特性就是超時。

Spring事務(wù)的回滾規(guī)則

默認情況下,事務(wù)只有在遇到運行期異常時才會回滾,而在遇到檢查型異常時不會回滾,但是也可以聲明事務(wù)在遇到特定的檢查型異常時像遇到運行期異常那樣回滾。同樣,你還可以聲明事務(wù)遇到特定的異常不回滾,即使這些異常是運行期異常。

(4)結(jié)合項目中使用

如何管理的:

1)Spring事務(wù)管理主要包括3個接口,Spring的事務(wù)主要是由他們?nèi)齻€共同完成的。

PlatformTransactionManager:事務(wù)管理器--主要用于平臺相關(guān)事務(wù)的管理主要有三個方法:

commit 事務(wù)提交;

rollback 事務(wù)回滾;

2)getTransaction 獲取事務(wù)狀態(tài)。

● TransactionDefinition:事務(wù)定義信息--用來定義事務(wù)相關(guān)的屬性,給事務(wù)管理器

● PlatformTransactionManager使用,這個接口有下面四個主要方法:

● getIsolationLevel:獲取隔離級別;

● getPropagationBehavior:獲取傳播行為;

● getTimeout:獲取超時時間;

● isReadOnly:是否只讀(保存、更新、刪除時屬性變?yōu)閒alse--可讀寫,查詢時為true--只讀)

事務(wù)管理器能夠根據(jù)這個返回值進行優(yōu)化,這些事務(wù)的配置信息,都可以通過配置文件進行配置。

3)TransactionStatus:事務(wù)具體運行狀態(tài)--事務(wù)管理過程中,每個時間點事務(wù)的狀態(tài)信息。

例如它的幾個方法:

● hasSavepoint():返回這個事務(wù)內(nèi)部是否包含一個保存點,

● isCompleted():返回該事務(wù)是否已完成,也就是說,是否已經(jīng)提交或回滾

● isNewTransaction():判斷當(dāng)前事務(wù)是否是一個新事務(wù)


猜你喜歡

Spring AOP實現(xiàn)原理和常見代理的區(qū)別 

什么是字節(jié)碼?字節(jié)碼擴展名是什么? 

Kubernetes核心原理和搭建 

傳智教育Java培訓(xùn)課程 

0 分享到:
和我們在線交談!