首頁技術文章正文

Spring事物的實現(xiàn)原理是什么?

更新時間:2021-05-21 來源:黑馬程序員 瀏覽量:

1577370495235_學IT就到黑馬程序員.gif

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


(1)Spring 事務的種類:

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

A.編程式事務管理使用TransactionTemplate。

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

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

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


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

Spring 事務的傳播行為說的是,當多個事務同時存在的時候,Spring 如何處理這些事務的行為。

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

② PROPAGATION_SUPPORTS:支持當前事務,如果當前存在事務,就加入該事務,如果當前不存在事務,就以非事務執(zhí)行?!?/p>

③ PROPAGATION_MANDATORY:支持當前事務,如果當前存在事務,就加入該事務,如果當前不存在事務,就拋出異常。

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

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

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

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

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


(3)Spring 中的隔離級別:

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

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

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

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

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



猜你喜歡:

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

Spring框架的緩存體系

Spring Boot如何實現(xiàn)微服務?

Java開發(fā)培訓課程

分享到:
在線咨詢 我要報名
和我們在線交談!