您好,登錄后才能下訂單哦!
這篇文章主要介紹“Spring對事務的管理和支持”,在日常操作中,相信很多人在Spring對事務的管理和支持問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Spring對事務的管理和支持”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
spring事務管理的好處是聲明式事務管理,也就是說可以通過IOC配置中指定邊界和事務屬性,這樣spring會自動在指定的事務邊界上應用事務屬性。
在spring的事務管理中,主要有3個接口,他們分別是:PlatformTransactionManager、TransactionDefinition、TransactionStatus。他們3個具體的關聯關系如下:
下面我們詳細了解一下上面3個接口的具體作用。
TransactionDefinition:用戶描述事務的隔離級別、超時時間、是否為只讀事務和事務傳播規則等控制事務具體行為的事務屬性。PlatformTransactionManager根據TransactionDefinition提供的事務屬性配置信息創建事務,并用TransactionStatus描述這個事務的激活事務的狀態。在上面我們介紹過TransactionDefinition用來描述事務的相關屬性,那么下面我們具體看一下在TransactionDefinition中都包括哪些事務屬性。
事務隔離:當前事務和其它事務的隔離程度。在TransactionDefinition中定義了和java.sql.Connection接口中一樣的隔離級別:ISOLATION_READ_UNCOMMITTED、ISOLATION_READ_COMMITTED、ISOLATION_REPEATABLE_READ、ISOLATION_SERIALIZABLE。上面介紹的這些常量正好對應在其它文章中提到過的數據庫的隔離級別。除此之外TransactionDefinition還包括默認的隔離級別ISOLATION_DEFAULT。它表示使用底層數據庫的默認隔離級別。
事務傳播:在正常的情況下事務中執行的所有代碼都會在一個事務中運行,但spring為我們提供了幾種可選的事務傳播類型:簡單的參與到現有的事務中、或者掛起當前事務、或者創建一個新的事務。
事務超時:事務在超時前能運行多久,超過時間后,事務將回滾。
只讀狀態:因為只讀事務不修改任何數據,所以在有只讀操作時可以對只讀事務做優化處理,提高運行性能。
TransactionStatus:TransactionStatus表示的是事務的具體運行狀態。也就是通過TransactionStatus可以獲取到事務運行期的狀態信息,也可以通過該接口間接的回滾事務。這是因為該接口繼承了SavepointManager,而SavepointManager接口又支持JDBC3.0中新增的保存點的分段事務控制能力。下面我們簡單了解一下SavepointManager中所包括的方法。
Object createSavepoint():創建一個保存點對象,以保證事務可以支持回滾到保存點上,也可以調用releaseSavepoint()方法釋放一個已經確定不用的保存點。
void rollbackToSavepoint(Object var1):將事務回滾到特定的保存點上,被回滾的保存點將自動釋放。
void releaseSavepoint(Object var1):釋放一個保存點,如果事務提交,那么所有的保存點都將釋放。
除了上述已有的方法外,TransactionStatus還擴展了以下SavepointManager中沒有的方法:
boolean hasSavepoint():判斷當前事務是否創建了保存點。
boolean isNewTransaction():判斷當前事務是否是一個新的事務,如果返回false則表示當前事務是一個已經存在的事務,或者當前操作未運行在事務環境中。
boolean isCompleted():判斷當前事務是否已經結束,已經提交事務或者事務回滾都任務當前事務已經結束。
boolean isRollbackOnly():判斷當前事務是否已經被標識為rollback-only。
void setRollbackOnly():將當前事務設置為rollback-only。通過該標識spring將此事務回滾。
PlatformTransactionManager:在其它的文章中使我們知道JDBC的事務只能提交或者回滾。在spring中PlatformTransactionManager的作用就是做上述功能的。下面我們看一下PlatformTransactionManager中的所涉及到的方法及其作用。
TransactionStatus getTransaction(TransactionDefinition var1):該方法根據事務定義的信息從事務環境中返回一個已存在的事務,或者創建一個新的事務,并用TransactionStatus記錄這個事務的運行狀態。
void commit(TransactionStatus var1):根據事務的狀態提交事務,如果事務已經被標識為rollback-only,則該方法將執行回滾操作。
void rollback(TransactionStatus var1):將事務回滾,如果調用commit()方法拋出一異常時,則spring會默認調用rollback()方法。
上面我們介紹了spring中有關事務的主要接口,下面我們繼續了解一下,在spring中這些接口的具體實現,實際上spring為不同的持久化技術都提供了不同的實現,相關的實現類如下:
spring就是通過這此實現類進而實現spring對事務的管理的,介紹了這么多,我們來看一下在spring中到底怎么用代碼的方式也就是聲明式事務管理。
這樣我們的數據源就支持事務管理了。
到此,關于“Spring對事務的管理和支持”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。