溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring對事務(wù)的管理和支持

發(fā)布時(shí)間:2021-09-01 10:02:07 來源:億速云 閱讀:153 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要介紹“Spring對事務(wù)的管理和支持”,在日常操作中,相信很多人在Spring對事務(wù)的管理和支持問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Spring對事務(wù)的管理和支持”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

spring事務(wù)管理的好處是聲明式事務(wù)管理,也就是說可以通過IOC配置中指定邊界和事務(wù)屬性,這樣spring會自動在指定的事務(wù)邊界上應(yīng)用事務(wù)屬性。

在spring的事務(wù)管理中,主要有3個(gè)接口,他們分別是:PlatformTransactionManager、TransactionDefinition、TransactionStatus。他們3個(gè)具體的關(guān)聯(lián)關(guān)系如下:

下面我們詳細(xì)了解一下上面3個(gè)接口的具體作用。

TransactionDefinition:用戶描述事務(wù)的隔離級別、超時(shí)時(shí)間、是否為只讀事務(wù)和事務(wù)傳播規(guī)則等控制事務(wù)具體行為的事務(wù)屬性。PlatformTransactionManager根據(jù)TransactionDefinition提供的事務(wù)屬性配置信息創(chuàng)建事務(wù),并用TransactionStatus描述這個(gè)事務(wù)的激活事務(wù)的狀態(tài)。在上面我們介紹過TransactionDefinition用來描述事務(wù)的相關(guān)屬性,那么下面我們具體看一下在TransactionDefinition中都包括哪些事務(wù)屬性。

  • 事務(wù)隔離:當(dāng)前事務(wù)和其它事務(wù)的隔離程度。在TransactionDefinition中定義了和java.sql.Connection接口中一樣的隔離級別:ISOLATION_READ_UNCOMMITTED、ISOLATION_READ_COMMITTED、ISOLATION_REPEATABLE_READ、ISOLATION_SERIALIZABLE。上面介紹的這些常量正好對應(yīng)在其它文章中提到過的數(shù)據(jù)庫的隔離級別。除此之外TransactionDefinition還包括默認(rèn)的隔離級別ISOLATION_DEFAULT。它表示使用底層數(shù)據(jù)庫的默認(rèn)隔離級別。

  • 事務(wù)傳播:在正常的情況下事務(wù)中執(zhí)行的所有代碼都會在一個(gè)事務(wù)中運(yùn)行,但spring為我們提供了幾種可選的事務(wù)傳播類型:簡單的參與到現(xiàn)有的事務(wù)中、或者掛起當(dāng)前事務(wù)、或者創(chuàng)建一個(gè)新的事務(wù)。

  • 事務(wù)超時(shí):事務(wù)在超時(shí)前能運(yùn)行多久,超過時(shí)間后,事務(wù)將回滾。

  • 只讀狀態(tài):因?yàn)橹蛔x事務(wù)不修改任何數(shù)據(jù),所以在有只讀操作時(shí)可以對只讀事務(wù)做優(yōu)化處理,提高運(yùn)行性能。

TransactionStatus:TransactionStatus表示的是事務(wù)的具體運(yùn)行狀態(tài)。也就是通過TransactionStatus可以獲取到事務(wù)運(yùn)行期的狀態(tài)信息,也可以通過該接口間接的回滾事務(wù)。這是因?yàn)樵摻涌诶^承了SavepointManager,而SavepointManager接口又支持JDBC3.0中新增的保存點(diǎn)的分段事務(wù)控制能力。下面我們簡單了解一下SavepointManager中所包括的方法。

  • Object createSavepoint():創(chuàng)建一個(gè)保存點(diǎn)對象,以保證事務(wù)可以支持回滾到保存點(diǎn)上,也可以調(diào)用releaseSavepoint()方法釋放一個(gè)已經(jīng)確定不用的保存點(diǎn)。

  • void rollbackToSavepoint(Object var1):將事務(wù)回滾到特定的保存點(diǎn)上,被回滾的保存點(diǎn)將自動釋放。

  • void releaseSavepoint(Object var1):釋放一個(gè)保存點(diǎn),如果事務(wù)提交,那么所有的保存點(diǎn)都將釋放。

除了上述已有的方法外,TransactionStatus還擴(kuò)展了以下SavepointManager中沒有的方法:

  • boolean hasSavepoint():判斷當(dāng)前事務(wù)是否創(chuàng)建了保存點(diǎn)。

  • boolean isNewTransaction():判斷當(dāng)前事務(wù)是否是一個(gè)新的事務(wù),如果返回false則表示當(dāng)前事務(wù)是一個(gè)已經(jīng)存在的事務(wù),或者當(dāng)前操作未運(yùn)行在事務(wù)環(huán)境中。

  • boolean isCompleted():判斷當(dāng)前事務(wù)是否已經(jīng)結(jié)束,已經(jīng)提交事務(wù)或者事務(wù)回滾都任務(wù)當(dāng)前事務(wù)已經(jīng)結(jié)束。

  • boolean isRollbackOnly():判斷當(dāng)前事務(wù)是否已經(jīng)被標(biāo)識為rollback-only。

  • void setRollbackOnly():將當(dāng)前事務(wù)設(shè)置為rollback-only。通過該標(biāo)識spring將此事務(wù)回滾。

PlatformTransactionManager:在其它的文章中使我們知道JDBC的事務(wù)只能提交或者回滾。在spring中PlatformTransactionManager的作用就是做上述功能的。下面我們看一下PlatformTransactionManager中的所涉及到的方法及其作用。

  • TransactionStatus getTransaction(TransactionDefinition var1):該方法根據(jù)事務(wù)定義的信息從事務(wù)環(huán)境中返回一個(gè)已存在的事務(wù),或者創(chuàng)建一個(gè)新的事務(wù),并用TransactionStatus記錄這個(gè)事務(wù)的運(yùn)行狀態(tài)。

  • void commit(TransactionStatus var1):根據(jù)事務(wù)的狀態(tài)提交事務(wù),如果事務(wù)已經(jīng)被標(biāo)識為rollback-only,則該方法將執(zhí)行回滾操作。

  • void rollback(TransactionStatus var1):將事務(wù)回滾,如果調(diào)用commit()方法拋出一異常時(shí),則spring會默認(rèn)調(diào)用rollback()方法。

上面我們介紹了spring中有關(guān)事務(wù)的主要接口,下面我們繼續(xù)了解一下,在spring中這些接口的具體實(shí)現(xiàn),實(shí)際上spring為不同的持久化技術(shù)都提供了不同的實(shí)現(xiàn),相關(guān)的實(shí)現(xiàn)類如下:

spring就是通過這此實(shí)現(xiàn)類進(jìn)而實(shí)現(xiàn)spring對事務(wù)的管理的,介紹了這么多,我們來看一下在spring中到底怎么用代碼的方式也就是聲明式事務(wù)管理。

Spring對事務(wù)的管理和支持

Spring對事務(wù)的管理和支持

Spring對事務(wù)的管理和支持

這樣我們的數(shù)據(jù)源就支持事務(wù)管理了。

到此,關(guān)于“Spring對事務(wù)的管理和支持”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI