Spring 事務管理的實現分析
阿新 • • 發佈:2019-02-01
1、Spring 事務管理實現的基本模型
在同一個 connection 裡,【開啟事務】->【執行method】->【回滾 OR 提交】
2、注意點
- 執行緒安全,每個執行緒同一個資料來源只有一個connection 。當執行緒在執行一個有事務的方法時,通過資料來源去獲取connection。
- 僅支援單個數據源的事務控制
- spring 抽象層 AbsPlatformTransactionManager,通過模板方法,由子類實現具體的【begin Transaction】【rollBack】【commit】, 由第三方實現,例如:DataSourceTransactionManager 、HibernateTransactionManager
- spring容器啟動時,注入了資料來源data source
- 最終實現的底層還是 java JDBC 的 connction 提供的方法實現,connection.createStatement(),cooncetion.commit(); connection.rollback().
3、設計類圖之設計模式
- 常用的事務實現是 DataSourceTransactionManager.
4、spring 如何知曉 【method】 添加了事務?
- 新增事務的方式: 註解配置事務以及【事務屬性,或事務定義】、xml 通過【pattern】模式匹配方式配置攔截點,同時配置了統一的需要的【事務屬性】,這裡暫不列舉。例如:xml 配置事務驅動註解,在程式碼中使用註解 @Transactional
- 下圖是【TransactionAspectSupport】 實現在事務中執行方法,也可能沒有建立事務。
- getTransactionAttribute(Method method, Class<?> targetClass) 獲取當前 method 的事務屬性。
- 根據事務屬性實現【三步走策略】