Spring中事務管理
阿新 • • 發佈:2019-02-14
一、事務
1.事務邏輯上的一組操作,組成這組操作的各個邏輯單元,要麼一起成功,要麼一起失敗
2.事務特性
(1)原子性:強調事務的不可分割
(2)一致性:事務的執行的前後資料的完整性保持一致
(3)隔離性:一個事務執行過程中,不應該收到其他事務的干擾
(4)永續性:事務一旦結束,資料就持久到資料庫中
3.事務併發產生的問題
(1)髒讀:一個事務讀取到了另外一個事務沒有提交的資料
(2)不可重複讀:一個事務讀到了另外一個事務已經提交的update資料導致多次查詢結果不一致
(3)虛讀/幻讀:一個事務讀取到了另外一個事務已經提交的insert資料導致多次查詢結果不一致
4.事務隔離級別
(1)讀未提交:髒讀,不可重複讀,虛讀都有可能發生
(2)讀已提交:避免髒讀,但是不可重複讀和虛讀都有可能發生
(3)可重複讀:避免髒讀和不可重複讀,但是虛讀有可能發生
(4)序列化:可以避免所有問題
5.MySql以及Oracle資料庫的事務隔離級別
Mysql預設:可重複讀
Oracle預設:讀已提交
二、Spring的事務管理(有三種方式)
1.三種方式:
(1)使用事務模板(瞭解)
(2)aop(掌握)
(3)註解(掌握)
2.使用步驟(aop方式):
(1)配置事務核心管理器DataSourceTransactionManager物件,此物件封裝了所有的事務操作,依賴於連線池(資料來源)
(2)配置事務通知
(3)配置目標物件
(4)配置織入
具體配置程式碼如下:
<!--事務核心管理器 依賴於資料來源dataSource--> <bean name="transactionManger" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!--配置事務通知 --> <tx:advice id="advice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="transfer" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/> </tx:attributes> </tx:advice> <!--配置織入 --> <aop:config> <!--配置事務切入點 --> <aop:pointcut expression="execution(* com.sgr.serviceImpl.*ServiceImpl.*(..))" id="txPc"/> <!--配置事務切面 --> <aop:advisor advice-ref="advice" pointcut-ref="txPc"/> </aop:config>