你們好,我是小菜,一個渴望在互聯網行業作到蔡不菜的小菜。可柔可剛,點贊則柔,白嫖則剛!web
死鬼~看完記得給我來個三連哦!spring
「本文主要介紹
Spring 中的 事務
若有須要,能夠參考
若有幫助,不忘 點贊 ❥sql創做不易,白嫖無義!數據庫
事務管理是企業級應用程序開發中必不可少的技術, 用來確保數據的完整性和一致性。express
事務就是一系列的動做, 它們被當作一個單獨的工做單元. 這些動做要麼所有完成, 要麼所有不起做用服務器
事務的四個關鍵屬性(ACID)併發
原子性(atomicity)
事務是一個原子操做, 由一系列動做組成. 事務的原子性確保動做要麼所有完成要麼徹底不起做用app
一致性(consistency)
一旦全部事務動做完成, 事務就被提交. 數據和資源就處於一種知足業務規則的一致性狀態中框架
隔離性(isolation)
可能有許多事務會同時處理相同的數據, 所以每一個事物都應該與其餘事務隔離開來, 防止數據損壞性能
持久性(durability)
一旦事務完成, 不管發生什麼系統錯誤, 它的結果都不該該受到影響. 一般狀況下, 事務的結果被寫到持久化存儲器中
Class DatasourceTransactionManager:
在應用程序中只須要處理一個數據源, 並且經過 JDBC 存取Class JtaTransactionManager:
在 JavaEE 應用服務器上用 JTA(Java Transaction API) 進行事務管理Class HibernateTransactionManager:
用 Hibernate 框架存取數據庫<!-- 配置事務管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 啓用事務註解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
複製代碼
@Transactional
註解來標註事務方法公有方法
方法
或者類
級別上添加 @Transactional 註解,當把這個註解應用到類上時, 這個類中的全部公共方法都會被定義成支持事務處理的在Spring配置文件中聲明:
<!-- 1. 配置事務管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 2. 配置事務屬性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 根據方法名指定事務的屬性 -->
<tx:method name="purchase" propagation="REQUIRES_NEW"/>
<tx:method name="get*" read-only="true"/>
<tx:method name="find*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- 3. 配置事務切入點, 以及把事務切入點和事務屬性關聯起來 -->
<aop:config>
<aop:pointcut expression="execution(* cbuc.life.tx.xml.service.*.*(..))"
id="txPointCut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
複製代碼
當同一個應用程序或者不一樣應用程序中的多個事務在同一個數據集上併發執行時,可能會出現許多意外的問題
併發事務所致使的問題能夠分爲下面三種類型
1)髒讀
對於兩個事物 T1, T2,T1 讀取了已經被 T2 更新但 尚未被提交的字段。以後, 若 T2 回滾,T1讀取的內容就是臨時且無效的
2)不可重複讀
對於兩個事物 T1, T2,T1 讀取了一個字段, 而後 T2 更新了該字段。以後,T1再次讀取同一個字段,值就不一樣了
3)幻讀
對於兩個事物 T1, T2,T1 從一個表中讀取了一個字段,而後 T2 在該表中插入了一些新的行。以後,若是 T1 再次讀取同一個表,就會多出幾行
READ_COMMITED
,SERIALIZABLE
isolation
指定事務隔離性,也能夠在配置文件中指定rollbackFor
和 noRollbackFor
屬性來定義,這兩個屬性被聲明爲 Class[] 類型的,所以能夠爲這兩個屬性指定多個異常類rollbackFor
時必須進行回滾 ;而norollbackFor
則反之「今天的你多努力一點,明天的你就能少說一句求人的話!
我是小菜,一個和你一塊兒學習的男人。
💋