Spring事務整理

簡介:

事務是 一系列的動做,它們綜合在一塊兒纔是一個完整的工做單元,這些動做必須所有完成,若是有一個失敗的話,那麼事務就會回滾到最開始的狀態,彷彿什麼都沒發生過同樣。
在企業級應用程序開發中,事務管理必不可少的技術,用來確保數據的完整性和一致性。
 

特性:(能夠忽略)

統一的接口

PlatformTransactionManager : 事務管理器
TransactionDefinition : 事務的一些基礎信息,如超時時間、隔離級別、傳播屬性等
TransactionStatus : 事務的一些狀態信息,如是不是一個新的事務、是否已被標記爲回滾
 

spring中的事務實現類

 

spring中事務的實現方式

1.  編程式的事務管理
    1)事務管理器:具體的事務管理實現類,jdbc
        org.springframework.jdbc.datasource.DataSourceTransactionManager
        須要注入:datasource
    2)事務管理的模板:
        org.springframework.transaction.support.TransactionTemplate
        須要注入:事務管理器
    3)在類中對模板進行使用 .execute()  
 
2. 使用XML配置 聲明式的事務管理(原始方式)
    1)事務管理器
    2)配置代理類:
        org.springframework.transaction.interceptor.TransactionProxyFactoryBean
 
 
3. 使用XML配置 聲明式的事務管理,基於tx/aop
         1)事務管理器
<!-- 配置事務的通知 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 
				propagation	:事務傳播行爲
				isolation	:事務的隔離級別
				read-only	:只讀
				rollback-for:發生哪些異常回滾
				no-rollback-for	:發生哪些異常不回滾
				timeout		:過時信息
			 -->
			<tx:method name="transfer" propagation="REQUIRED" />
		</tx:attributes>
	</tx:advice>
	
	<!-- 配置切面 -->
	<aop:config>
		<!-- 配置切入點 -->
		<aop:pointcut expression="execution(* com.zs.spring.demo3.AccountService+.*(..))" id="pointcut1"/>
		<!-- 配置切面 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
	</aop:config>
 
 
4. 使用註解配置 聲明式事務
     1)事務管理器
    2)開啓事務掃描
<tx:annotation-driven transaction-manager="transactionManager"/>
 
    3)添加 @Transactional 註解,定義屬性
 

事務的屬性:5個維度

這裏寫圖片描述
傳播行爲
    當一個事務方法調用另外一個事務方法的時候
       1)是否支持事務:
       2)使用誰的事務
 
隔離規則:
    針對可能存在的併發問題,選擇設置什麼樣的行鎖和表鎖
從上到下,隔離級別愈來愈高,效率愈來愈低
 
回滾規則
    針對異常,設置哪些異常不回滾
 
是否只讀
    只讀狀況下,數據庫不接受修改,若是修改報錯
org.springframework.dao. TransientDataAccessResourceException: PreparedStatementCallback; SQL [update account set money = money-? where name = ?]; Connection is read-only. Queries leading to data modification are not allowed; nested exception is java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
 
事務超時
    若是超過設定的時間,直接回滾
 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">java

相關文章
相關標籤/搜索