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

全國(guó)咨詢/投訴熱線:400-618-4000

Spring事務(wù)的實(shí)現(xiàn)方式和實(shí)現(xiàn)原理【java面試必會(huì)】

更新時(shí)間:2021年05月21日18時(shí)11分 來(lái)源:Spring事務(wù)的實(shí)現(xiàn)方式和實(shí)現(xiàn)原理 瀏覽次數(shù):

好口碑IT培訓(xùn)

Spring 事務(wù)的本質(zhì)其實(shí)就是數(shù)據(jù)庫(kù)對(duì)事務(wù)的支持,沒有數(shù)據(jù)庫(kù)的事務(wù)支持,spring 是無(wú)法提供事務(wù)功能的。真正的數(shù)據(jù)庫(kù)層的事務(wù)提交和回滾是通過binlog 或者redo log 實(shí)現(xiàn)的。


(1)Spring 事務(wù)的種類:

spring 支持編程式事務(wù)管理和聲明式事務(wù)管理兩種方式:

A.編程式事務(wù)管理使用TransactionTemplate。

B.聲明式事務(wù)管理建立在AOP之上的。其本質(zhì)是通過AOP功能,對(duì)方法前后進(jìn)行攔截,將事務(wù)處理的功能編織到攔截的方法中,也就是在目標(biāo)方法開始之前加入一個(gè)事務(wù),在執(zhí)行完目標(biāo)方法之后根據(jù)執(zhí)行情況提交或者回滾事務(wù)。

聲明式事務(wù)最大的優(yōu)點(diǎn)就是不需要在業(yè)務(wù)邏輯代碼中摻雜事務(wù)管理的代碼,只需在配置文件中做相關(guān)的事務(wù)規(guī)則聲明或通過@Transactional 注解的方式,便可以將事務(wù)規(guī)則應(yīng)用到業(yè)務(wù)邏輯中。

聲明式事務(wù)管理要優(yōu)于編程式事務(wù)管理,這正是spring倡導(dǎo)的非侵入式的開發(fā)方式,使業(yè)務(wù)代碼不受污染,只要加上注解就可以獲得完全的事務(wù)支持。唯一不足地方是,最細(xì)粒度只能作用到方法級(jí)別,無(wú)法做到像編程式事務(wù)那樣可以作用到代碼塊級(jí)別。


(2)Spring 的事務(wù)傳播行為:

Spring 事務(wù)的傳播行為說(shuō)的是,當(dāng)多個(gè)事務(wù)同時(shí)存在的時(shí)候,Spring 如何處理這些事務(wù)的行為。

① PROPAGATION_REQUIRED:如果當(dāng)前沒有事務(wù),就創(chuàng)建一個(gè)新事務(wù),如果當(dāng)前存在事務(wù),就加入該事務(wù),該設(shè)置是最常用的設(shè)置。

② PROPAGATION_SUPPORTS:支持當(dāng)前事務(wù),如果當(dāng)前存在事務(wù),就加入該事務(wù),如果當(dāng)前不存在事務(wù),就以非事務(wù)執(zhí)行。‘

③ PROPAGATION_MANDATORY:支持當(dāng)前事務(wù),如果當(dāng)前存在事務(wù),就加入該事務(wù),如果當(dāng)前不存在事務(wù),就拋出異常。

④ PROPAGATION_REQUIRES_NEW:創(chuàng)建新事務(wù),無(wú)論當(dāng)前存不存在事務(wù),都創(chuàng)建新事務(wù)。

⑤ PROPAGATION_NOT_SUPPORTED:以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。

⑥ PROPAGATION_NEVER:以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。

⑦ PROPAGATION_NESTED:如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行。

如果當(dāng)前沒有事務(wù),則按REQUIRED 屬性執(zhí)行。


(3)Spring 中的隔離級(jí)別:

① ISOLATION_DEFAULT:這是個(gè)PlatfromTransactionManager 默認(rèn)的隔離級(jí)別,使用數(shù)據(jù)庫(kù)默認(rèn)的事務(wù)隔離級(jí)別。

② ISOLATION_READ_UNCOMMITTED:讀未提交,允許另外一個(gè)事務(wù)可以看到這個(gè)事務(wù)未提交的數(shù)據(jù)。

③ ISOLATION_READ_COMMITTED:讀已提交,保證一個(gè)事務(wù)修改的數(shù)據(jù)提交后才能被另一事務(wù)讀取,而且能看到該事務(wù)對(duì)已有記錄的更新。

④ ISOLATION_REPEATABLE_READ:可重復(fù)讀,保證一個(gè)事務(wù)修改的數(shù)據(jù)提交后才能被另一事務(wù)讀取,但是不能看到該事務(wù)對(duì)已有記錄的更新。

⑤ ISOLATION_SERIALIZABLE:一個(gè)事務(wù)在執(zhí)行的過程中完全看不到其他事務(wù)對(duì)數(shù)據(jù)庫(kù)所做的更新。



猜你喜歡:

Spring MVC框架有哪些優(yōu)點(diǎn)?

Spring框架的緩存體系

Spring Boot如何實(shí)現(xiàn)微服務(wù)?

傳智教育Java開發(fā)培訓(xùn)課程

0 分享到:
和我們?cè)诰€交談!