日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

spring手动回滚事务_Spring总结---gt;03

發(fā)布時(shí)間:2024/7/5 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring手动回滚事务_Spring总结---gt;03 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是事務(wù)

邏輯上的一組操作,組成這組操作的各個(gè)單元,要么全都成功,要么全都失敗。

事務(wù)的特性

原子性:事務(wù)不可分割一致性:事務(wù)執(zhí)行前后數(shù)據(jù)完整性保持一致隔離性:一個(gè)事務(wù)的執(zhí)行不應(yīng)該受到其他事務(wù)的干擾 持久性:一旦事務(wù)結(jié)束,數(shù)據(jù)就持久化到數(shù)據(jù)庫(kù)

環(huán)境搭配

1、導(dǎo)入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、將要連接數(shù)據(jù)庫(kù)的屬性封裝到文件中。 4、創(chuàng)建業(yè)務(wù)層接口和實(shí)現(xiàn)類。 5、創(chuàng)建DAO層接口和實(shí)現(xiàn)類,如果要使用Spring的jdbc模板,需要用實(shí)現(xiàn)類去繼承jdbcDaoSupport。這樣獲得了jdbc操作數(shù)據(jù)庫(kù)的模板。

步驟3

如果不添加jdbc

找不到Connection連接對(duì)象

繼承jdbcDaoSupport

接下來(lái)在方法中,我們可以通過(guò)使用this關(guān)鍵字來(lái)調(diào)用Jdbc的模板,該圖為jdbcDaoSupport的源碼中封裝的

通過(guò)使用this關(guān)鍵字調(diào)用this.getjdbcTemplate()方法,調(diào)用update進(jìn)行DML操作。 注意:update方法中有一個(gè)重載方法支持可變參數(shù),所以可以傳遞多個(gè)參數(shù)。

傳入sql語(yǔ)句,以及可變參數(shù)6、創(chuàng)建業(yè)務(wù)層接口。 7、創(chuàng)建業(yè)務(wù)層接口實(shí)現(xiàn)類。 8、在原有的AspectJ的applicationContext.xml文件進(jìn)行修該。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、注冊(cè)c3p0數(shù)據(jù)源,用于獲取數(shù)據(jù)庫(kù)連接屬性的值。8.4、獲取兩個(gè)業(yè)務(wù)層實(shí)現(xiàn)類,子標(biāo)簽引用地址為數(shù)據(jù)源。

約束頭

取值

事務(wù)管理

在程序運(yùn)行中,可能會(huì)發(fā)生異常,那么需要將事務(wù)進(jìn)行回滾。而事務(wù)回滾一般是在持久層進(jìn)行的,為了方便統(tǒng)一,將事務(wù)的管理 在業(yè)務(wù)層中。 事務(wù)回滾有兩種方式,一種AspectJ的AOP配置管理事務(wù),一種是事務(wù)注解管理事務(wù)。

AOP配置管理事務(wù)

目前是測(cè)試階段,手動(dòng)添加一個(gè)異常類,方便用于測(cè)試。 1、在applicationContext.xml文件中添加注冊(cè)事務(wù)管理標(biāo)簽。 2、注冊(cè)事務(wù)通知,使用tx標(biāo)簽,引入tx標(biāo)簽的約束頭信息。http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsdxmlns:tx="http://www.springframework.org/schema/tx"

class="DataSourceTransactionManager的全限定類名,這個(gè)應(yīng)用在jdbc或myBatis進(jìn)行持久化數(shù)據(jù)時(shí)使用"

其中,tx標(biāo)簽中的屬性值為,

<tx:advice id="名字" transaction-manager="注冊(cè)過(guò)的事務(wù)管理器">

<tx:attributes> 這個(gè)標(biāo)簽的作用是配置事務(wù)屬性

tx:method name="將事務(wù)添加到哪個(gè)方法上*" isolation="事務(wù)的隔離級(jí)別,默認(rèn)default" propagation="事務(wù)的行為" read-only="只讀false或者true" rollback-for="對(duì)哪個(gè)異常進(jìn)行回滾"no-rollback-for="對(duì)哪個(gè)異常不進(jìn)行回滾"timeout="超時(shí)時(shí)限,單位是秒"/>

有的屬性沒(méi)寫(xiě),可以自行參照測(cè)試。3、AOP配置,使用AOP的aop:config標(biāo)簽。

業(yè)務(wù)層中的異常類的應(yīng)用,經(jīng)創(chuàng)建測(cè)試類后,通過(guò)獲取bean,調(diào)用相關(guān)方法進(jìn)行測(cè)試,事務(wù)的回滾成功

聲明式事務(wù)

1、編程式事務(wù):

1.1 由程序員編程事務(wù)控制代碼。

1.2 OpenSessionInView 編程式事務(wù)。

2.聲明式事務(wù):

2.1 事務(wù)控制代碼已經(jīng)由 spring 寫(xiě)好.程序員只需要聲明出哪些方法需要進(jìn)行事務(wù)控制和如何進(jìn)行事務(wù)控制。

3.聲明式事務(wù)都是針對(duì)于 ServiceImpl 類下方法的。

4.事務(wù)管理器基于通知(advice)的。

5.在 spring 配置文件中配置聲明式事務(wù)。

聲明式事務(wù)中屬性解釋

1. name=”” 哪些方法需要有事務(wù)控制

1.1 支持*通配符

2. readonly=”boolean” 是否是只讀事務(wù).

2.1 如果為 true,告訴數(shù)據(jù)庫(kù)此事務(wù)為只讀事務(wù).數(shù)據(jù)化優(yōu)化,會(huì)對(duì)性能有一定提升,所以只要是查詢的方法,建議使用此數(shù)據(jù).

2.2 如果為 false(默認(rèn)值),事務(wù)需要提交的事務(wù).建議新增,刪除,修改.

3. propagation 控制事務(wù)傳播行為.

3.1 當(dāng)一個(gè)具有事務(wù)控制的方法被另一個(gè)有事務(wù)控制的方法調(diào)用后,需要如何管理事務(wù)(新建事務(wù)?在事務(wù)中執(zhí)行?把事務(wù)掛起?報(bào)異常?)

3.2 REQUIRED(默認(rèn)值): 如果當(dāng)前有事務(wù),就在事務(wù)中執(zhí)行,如果當(dāng)前沒(méi)有事務(wù),新建一個(gè)事務(wù).

3.3 SUPPORTS: 如果當(dāng)前有事務(wù)就在事務(wù)中執(zhí)行,如果當(dāng)前沒(méi)有事務(wù),就在非事務(wù)狀態(tài)下執(zhí)行.

3.4 MANDATORY: 必須在事務(wù)內(nèi)部執(zhí)行,如果當(dāng)前有事務(wù),就在事務(wù)中執(zhí)行,如果沒(méi)有事務(wù),報(bào)錯(cuò).

3.5 REQUIRES_NEW: 必須在事務(wù)中執(zhí)行,如果當(dāng)前沒(méi)有事務(wù),新建事務(wù),如果當(dāng)前有事務(wù),把當(dāng)前事務(wù)掛起.

3.6 NOT_SUPPORTED: 必須在非事務(wù)下執(zhí)行,如果當(dāng)前沒(méi)有事務(wù),正常執(zhí)行,如果當(dāng)前有事務(wù),把當(dāng)前事務(wù)掛起.

3.7 NEVER: 必須在非事務(wù)狀態(tài)下執(zhí)行,如果當(dāng)前沒(méi)有事務(wù),正常執(zhí)行,如果當(dāng)前有事務(wù),報(bào)錯(cuò).

3.8 NESTED: 必須在事務(wù)狀態(tài)下執(zhí)行.如果沒(méi)有事務(wù),新建事務(wù),如果當(dāng)前有事務(wù),創(chuàng)建一個(gè)嵌套事務(wù).

4. isolation=”” 事務(wù)隔離級(jí)別

4.1 在多線程或并發(fā)訪問(wèn)下如何保證訪問(wèn)到的數(shù)據(jù)具有完整性的.

4.2 臟讀:

4.2.1 一個(gè)事務(wù)(A)讀取到另一個(gè)事務(wù)(B)中未提交的數(shù)據(jù),另一個(gè)事務(wù)中數(shù)據(jù)可能進(jìn)行了改變,此時(shí)A事務(wù)讀取的數(shù)據(jù)可能和數(shù)據(jù)庫(kù)中數(shù)據(jù)是不一致的,此時(shí)認(rèn)為數(shù)據(jù)是臟數(shù)據(jù),讀取臟數(shù)據(jù)過(guò)程叫做臟讀。

4.3 不可重復(fù)讀:

4.3.1、主要針對(duì)的是某行數(shù)據(jù).(或行中某列)

4.3.2、主要針對(duì)的操作是修改操作.

4.3.3、兩次讀取在同一個(gè)事務(wù)內(nèi)

4.3.4、當(dāng)事務(wù)A第一次讀取事務(wù)后,事務(wù)B對(duì)事務(wù)A讀取的淑君進(jìn)行修改,事務(wù) A 中再次讀取的數(shù)據(jù)和之前讀取的數(shù)據(jù)不一致,過(guò)程不可重復(fù)讀。

4.4 幻讀:

4.4.1、 主要針對(duì)的操作是新增或刪除

4.4.2、 兩次事務(wù)的結(jié)果.

4.4.3、 事務(wù)A按照特定條件查詢出結(jié)果,事務(wù)B新增了一條符合條件的數(shù)據(jù).事務(wù) A 中查詢的數(shù)據(jù)和數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致的,事務(wù) A 好像出現(xiàn)了幻覺(jué),這種情況稱為幻讀.

4.5DEFAULT: 默認(rèn)值,由底層數(shù)據(jù)庫(kù)自動(dòng)判斷應(yīng)該使用什么隔離界

4.6READ_UNCOMMITTED: 可以讀取未提交數(shù)據(jù),可能出現(xiàn)臟讀,不

重復(fù)讀,幻讀.

4.6.1 效率最高.

4.7 READ_COMMITTED:只能讀取其他事務(wù)已提交數(shù)據(jù).可以防止臟讀,可能出現(xiàn)不可重復(fù)讀和幻讀.

4.8 REPEATABLE_READ: 讀取的數(shù)據(jù)被添加鎖,防止其他事務(wù)修改此數(shù)據(jù),可以防止不可重復(fù)讀.臟讀,可能出現(xiàn)幻讀.

4.9 SERIALIZABLE: 排隊(duì)操作,對(duì)整個(gè)表添加鎖.一個(gè)事務(wù)在操作數(shù)據(jù)時(shí),另一個(gè)事務(wù)等待事務(wù)操作完成后才能操作這個(gè)表.

4.9.1 最安全的

4.9.2 效率最低的.

5. rollback-for=”異常類型全限定路徑”

5.1 當(dāng)出現(xiàn)什么異常時(shí)需要進(jìn)行回滾

5.2 建議:給定該屬性值.

5.2.1 手動(dòng)拋異常一定要給該屬性值

6. no-rollback-for=””

6.1 當(dāng)出現(xiàn)什么異常時(shí)不滾回事務(wù).

總結(jié)

以上是生活随笔為你收集整理的spring手动回滚事务_Spring总结---gt;03的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。