spring編程式事務
① Spring的事務管理有幾種方式
Spring框架中的事務管理主要包括聲明式事務和編程式事務兩種方式。聲明式事務通常通過註解或XML配置來實現,而編程式事務則需要在代碼中直接嵌入。
事務的隔離級別定義了不同事務之間的並發控製程度。常見的隔離級別包括Serializable、Repeatable Read、Read Committed以及Read Uncommitted。
Serializable是隔離級別中最嚴格的,它保證了事務串列執行,資源消耗最大。而Repeatable Read則確保了一個事務不會修改由另一個事務讀取但未提交的數據,避免了「臟讀取」和「不可重復讀取」的情況,但會帶來更多的性能損失。
Read Committed是大多數主流資料庫的默認事務級別,它保證了一個事務不會讀到另一個並行事務已修改但未提交的數據,避免了「臟讀取」。這種級別適用於大多數系統。
Read Uncommitted是最寬松的隔離級別,它保證了讀取過程中不會讀取到非法數據,但可能會導致「臟讀取」。
事務的隔離級別與資料庫硬體相關,處理多事務的並發問題時,需要根據具體需求選擇合適的隔離級別。
② 什麼是spring的編程式事務處理,聲明式事務處理
spring支持編程式事務管理和聲明式事務管理兩種方式。
編程式事務使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對於編程式事務管理,spring推薦使用TransactionTemplate。
聲明式事務是建立在AOP之上的。其本質是對方法前後進行攔截,然後在目標方法開始之前創建或者加入一個事務,在執行完目標方法之後根據執行情況提交或者回滾事務。聲明式事務最大的優點就是不需要通過編程的方式管理事務,這樣就不需要在業務邏輯代碼中摻雜事務管理的代碼,只需在配置文件中做相關的事務規則聲明(或通過基於@Transactional註解的方式),便可以將事務規則應用到業務邏輯中。
顯然聲明式事務管理要優於編程式事務管理,這正是spring倡導的非侵入式的開發方式。聲明式事務管理使業務代碼不受污染,一個普通的POJO對象,只要加上註解就可以獲得完全的事務支持。和編程式事務相比,聲明式事務唯一不足地方是,它的最細粒度只能作用到方法級別,無法做到像編程式事務那樣可以作用到代碼塊級別。但是即便有這樣的需求,也存在很多變通的方法,比如,可以將需要進行事務管理的代碼塊獨立為方法等等。
聲明式事務管理也有兩種常用的方式,一種是基於tx和aop名字空間的xml配置文件,另一種就是基於@Transactional註解。顯然基於註解的方式更簡單易用,更清爽