事務管理可以幫助我們保證數據的一致性,對應企業的實際應用很重要。
Spring的事務機制包括聲明式事務和編程式事務。
編程式事務管理:Spring推薦使用TransactionTemplate,實際開發中使用聲明式事務較多。
聲明式事務管理:將我們從復雜的事務處理中解脫出來,獲取連接,關閉連接、事務提交、回滾、異常處理等這些操作都不用我們處理了,Spring都會幫我們處理。
聲明式事務管理使用了AOP面向切面編程實現的,本質就是在目標方法執行前后進行攔截。在目標方法執行前加入或創建一個事務,在執行方法執行后,根據實際情況選擇提交或是回滾事務。
如何管理的:
Spring事務管理主要包括3個接口,Spring的事務主要是由他們三個共同完成的。
1)PlatformTransactionManager:事務管理器--主要用於平台相關事務的管理
主要有三個方法:commit 事務提交;
rollback 事務回滾;
getTransaction 獲取事務狀態。
2)TransactionDefinition:事務定義信息--用來定義事務相關的屬性,給事務管理器PlatformTransactionManager使用
這個接口有下面四個主要方法:
getIsolationLevel:獲取隔離級別;
getPropagationBehavior:獲取傳播行為;
getTimeout:獲取超時時間;
isReadOnly:是否只讀(保存、更新、刪除時屬性變為false--可讀寫,查詢時為true--只讀)
事務管理器能夠根據這個返回值進行優化,這些事務的配置信息,都可以通過配置文件進行配置。
3)TransactionStatus:事務具體運行狀態--事務管理過程中,每個時間點事務的狀態信息。
例如它的幾個方法:
hasSavepoint():返回這個事務內部是否包含一個保存點,
isCompleted():返回該事務是否已完成,也就是說,是否已經提交或回滾
isNewTransaction():判斷當前事務是否是一個新事務
聲明式事務的優缺點:
優點
不需要在業務邏輯代碼中編寫事務相關代碼,只需要在配置文件配置或使用注解(@Transaction),這種方式沒有侵入性。
缺點
聲明式事務的最細粒度作用於方法上,如果像代碼塊也有事務需求,只能變通下,將代碼塊變為方法