1. 程式人生 > >Spring中事務管理

Spring中事務管理


一、事務


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>