Spring系列之三 Spring 事務

Spring事務這個東西比以前的AOP和MVC都要複雜的多,並且Spring聲明式的事務是很是經常使用的一個功能.java

一.事務定義和併發問題spring

    事務是指一段操做由幾個部分組成,要麼全完成,要不所有撤銷.事務的特性主要是:一致性,原子性,隔離性.持久性.數據庫

二.事物的隔離級別express

    併發使用事務的時候會出現各類問題,有人分析過,主要是5種狀況,,3種讀問題:髒讀,不可重複讀,幻象讀.2種寫問題:第一類丟失更新,第二類丟失更新.爲了解決這些事務併發所產生的問題,數據庫實現了事務的隔離級別,通常狀況下數據庫都支持4種,有的最低級是不支持的.              READ UNCOMMITTED,READ COMMITED,REPEATABLE READ,SERIALIZABLE,他們對5中事務併發解決能力以下圖所示:併發

三.事務的傳播特性ui

    事務傳播特性是指當A事務遇到B事務的時候如何處理.事務傳播特性主要用這幾個REQUIRED,SUPPORTS,MANDATORY,REQUIRES_NEW,NOT SUPPORTED,NEVER,NESTED
spa

Required:當前若是存在事務就加入進去,若是沒有事物就新建事務code

Supports:當前若是存在事務就加入,不存在事務就以非事物的方式運行事務

Mandatory:當前若是存在事務就加入,若是不存在事務就拋出異常
get

Not_supported : 當前存在事務就掛起.

Required_New:當前若是不存在事務就建立事務,若是存在就掛起當前事務

Never:不以事務的方式運行,若是存在事務就拋出異常.

Nested:若是存在事務則嵌套到當前事務中,若是不存在事務則新建一個事務.

四.Spring XML配置事物

<!-- 配置事物管理器 這個是jdbc的事務管理器 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	<aop:config proxy-target-class="true">
		<!-- 定義切面 -->
		<aop:pointcut expression="execution(* com.lubby.service.impl.*.* (..))"
			id="serviceMethod" />
		<!-- 引用事務加強 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
	</aop:config>
	<!-- 事務加強 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<!-- 事務屬性定義 -->
		<tx:attributes>
			<tx:method name="add*" propagation="REQUIRED" isolation="READ_UNCOMMITTED"
				rollback-for="Excption" />
		</tx:attributes>
	</tx:advice>

    advice中的propagation是指事務的傳播特性,isolation是指事務的隔離級別.rollback-for是遇到什麼類型的異常進行回滾

相關文章
相關標籤/搜索