javascript
spring手动回滚事务_Spring总结---gt;03
什么是事務
邏輯上的一組操作,組成這組操作的各個單元,要么全都成功,要么全都失敗。事務的特性
原子性:事務不可分割一致性:事務執行前后數據完整性保持一致隔離性:一個事務的執行不應該受到其他事務的干擾 持久性:一旦事務結束,數據就持久化到數據庫環境搭配
1、導入jar包。mysql-connector-java-5.1.30spring-tx-4.1.6.RELEASEspring-jdbc-4.1.6.RELEASEcom.springsource.com.mchange.v2.c3p0-0.9.1.2 2、添加Spring的配置文件。 3、將要連接數據庫的屬性封裝到文件中。 4、創建業務層接口和實現類。 5、創建DAO層接口和實現類,如果要使用Spring的jdbc模板,需要用實現類去繼承jdbcDaoSupport。這樣獲得了jdbc操作數據庫的模板。步驟3如果不添加jdbc
找不到Connection連接對象繼承jdbcDaoSupport接下來在方法中,我們可以通過使用this關鍵字來調用Jdbc的模板,該圖為jdbcDaoSupport的源碼中封裝的
通過使用this關鍵字調用this.getjdbcTemplate()方法,調用update進行DML操作。 注意:update方法中有一個重載方法支持可變參數,所以可以傳遞多個參數。傳入sql語句,以及可變參數6、創建業務層接口。 7、創建業務層接口實現類。 8、在原有的AspectJ的applicationContext.xml文件進行修該。8.1、添加約束頭信息xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd8.2、加載jdbc屬性文件。8.3、注冊c3p0數據源,用于獲取數據庫連接屬性的值。8.4、獲取兩個業務層實現類,子標簽引用地址為數據源。約束頭取值事務管理
在程序運行中,可能會發生異常,那么需要將事務進行回滾。而事務回滾一般是在持久層進行的,為了方便統一,將事務的管理 在業務層中。 事務回滾有兩種方式,一種AspectJ的AOP配置管理事務,一種是事務注解管理事務。AOP配置管理事務
目前是測試階段,手動添加一個異常類,方便用于測試。 1、在applicationContext.xml文件中添加注冊事務管理標簽。 2、注冊事務通知,使用tx標簽,引入tx標簽的約束頭信息。http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdxmlns:tx="http://www.springframework.org/schema/tx"class="DataSourceTransactionManager的全限定類名,這個應用在jdbc或myBatis進行持久化數據時使用"其中,tx標簽中的屬性值為,
<tx:advice id="名字" transaction-manager="注冊過的事務管理器">
<tx:attributes> 這個標簽的作用是配置事務屬性
tx:method name="將事務添加到哪個方法上*" isolation="事務的隔離級別,默認default" propagation="事務的行為" read-only="只讀false或者true" rollback-for="對哪個異常進行回滾"no-rollback-for="對哪個異常不進行回滾"timeout="超時時限,單位是秒"/>
有的屬性沒寫,可以自行參照測試。3、AOP配置,使用AOP的aop:config標簽。業務層中的異常類的應用,經創建測試類后,通過獲取bean,調用相關方法進行測試,事務的回滾成功
聲明式事務
1、編程式事務:
1.1 由程序員編程事務控制代碼。
1.2 OpenSessionInView 編程式事務。
2.聲明式事務:
2.1 事務控制代碼已經由 spring 寫好.程序員只需要聲明出哪些方法需要進行事務控制和如何進行事務控制。
3.聲明式事務都是針對于 ServiceImpl 類下方法的。
4.事務管理器基于通知(advice)的。
5.在 spring 配置文件中配置聲明式事務。
聲明式事務中屬性解釋
1. name=”” 哪些方法需要有事務控制
1.1 支持*通配符
2. readonly=”boolean” 是否是只讀事務.
2.1 如果為 true,告訴數據庫此事務為只讀事務.數據化優化,會對性能有一定提升,所以只要是查詢的方法,建議使用此數據.
2.2 如果為 false(默認值),事務需要提交的事務.建議新增,刪除,修改.
3. propagation 控制事務傳播行為.
3.1 當一個具有事務控制的方法被另一個有事務控制的方法調用后,需要如何管理事務(新建事務?在事務中執行?把事務掛起?報異常?)
3.2 REQUIRED(默認值): 如果當前有事務,就在事務中執行,如果當前沒有事務,新建一個事務.
3.3 SUPPORTS: 如果當前有事務就在事務中執行,如果當前沒有事務,就在非事務狀態下執行.
3.4 MANDATORY: 必須在事務內部執行,如果當前有事務,就在事務中執行,如果沒有事務,報錯.
3.5 REQUIRES_NEW: 必須在事務中執行,如果當前沒有事務,新建事務,如果當前有事務,把當前事務掛起.
3.6 NOT_SUPPORTED: 必須在非事務下執行,如果當前沒有事務,正常執行,如果當前有事務,把當前事務掛起.
3.7 NEVER: 必須在非事務狀態下執行,如果當前沒有事務,正常執行,如果當前有事務,報錯.
3.8 NESTED: 必須在事務狀態下執行.如果沒有事務,新建事務,如果當前有事務,創建一個嵌套事務.
4. isolation=”” 事務隔離級別
4.1 在多線程或并發訪問下如何保證訪問到的數據具有完整性的.
4.2 臟讀:
4.2.1 一個事務(A)讀取到另一個事務(B)中未提交的數據,另一個事務中數據可能進行了改變,此時A事務讀取的數據可能和數據庫中數據是不一致的,此時認為數據是臟數據,讀取臟數據過程叫做臟讀。
4.3 不可重復讀:
4.3.1、主要針對的是某行數據.(或行中某列)
4.3.2、主要針對的操作是修改操作.
4.3.3、兩次讀取在同一個事務內
4.3.4、當事務A第一次讀取事務后,事務B對事務A讀取的淑君進行修改,事務 A 中再次讀取的數據和之前讀取的數據不一致,過程不可重復讀。
4.4 幻讀:
4.4.1、 主要針對的操作是新增或刪除
4.4.2、 兩次事務的結果.
4.4.3、 事務A按照特定條件查詢出結果,事務B新增了一條符合條件的數據.事務 A 中查詢的數據和數據庫中的數據不一致的,事務 A 好像出現了幻覺,這種情況稱為幻讀.
4.5DEFAULT: 默認值,由底層數據庫自動判斷應該使用什么隔離界
別
4.6READ_UNCOMMITTED: 可以讀取未提交數據,可能出現臟讀,不
重復讀,幻讀.
4.6.1 效率最高.
4.7 READ_COMMITTED:只能讀取其他事務已提交數據.可以防止臟讀,可能出現不可重復讀和幻讀.
4.8 REPEATABLE_READ: 讀取的數據被添加鎖,防止其他事務修改此數據,可以防止不可重復讀.臟讀,可能出現幻讀.
4.9 SERIALIZABLE: 排隊操作,對整個表添加鎖.一個事務在操作數據時,另一個事務等待事務操作完成后才能操作這個表.
4.9.1 最安全的
4.9.2 效率最低的.
5. rollback-for=”異常類型全限定路徑”
5.1 當出現什么異常時需要進行回滾
5.2 建議:給定該屬性值.
5.2.1 手動拋異常一定要給該屬性值
6. no-rollback-for=””
6.1 當出現什么異常時不滾回事務.
總結
以上是生活随笔為你收集整理的spring手动回滚事务_Spring总结---gt;03的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis常用数据类型的数据结构
- 下一篇: poj 1250 解题(链表法)