欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java事務(wù)回滾失敗問(wèn)題分析

 更新時(shí)間:2018年01月03日 10:48:22   作者:nice丿love  
這篇文章主要介紹了java事務(wù)回滾失敗問(wèn)題分析,具有一定借鑒價(jià)值,需要的朋友可以參考下

Spring-Java事物回滾失效處理最近在做項(xiàng)目中,無(wú)意間發(fā)現(xiàn)有個(gè)類在拋事物回滾操作,數(shù)據(jù)也正常的插入到數(shù)據(jù)庫(kù)當(dāng)中了,于是仔細(xì)查看看一下具體原因。

一切還是要從Java的檢查型異常和非檢查型異常說(shuō)起。

那么什么是檢查型異常什么又是非檢查型異常呢?

最簡(jiǎn)單的判斷點(diǎn)有兩個(gè):

1.繼承自RuntimeException或Error的是非檢查型異常,而繼承自Exception的則是檢查型異常(當(dāng)然,RuntimeException本身也是Exception的子類)。

2.對(duì)非檢查型類異??梢圆挥貌东@,而檢查型異常則必須用try……catch語(yǔ)句塊進(jìn)行處理或者把異常交給上級(jí)方法處理,總之就是必須寫(xiě)代碼處理它。

Java的異常結(jié)構(gòu)如下圖。其中直接繼承Exception的異常,必須捕獲,屬于檢查型異常。

再回過(guò)來(lái)看我的代碼:

1、方法名前面有

@Transactional 

2、Spring的配置文件applicationContext-XXX.xml當(dāng)中也有Spring事物的相關(guān)配置

<bean id="transactionManager" 
  class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
  <property name="dataSource" ref="dataSource" /> 
  <property name="rollbackOnCommitFailure" value="true"></property> 
</bean> 

但是為什么在Service層方法調(diào)用的時(shí)候,try……catch拋Exception異常已經(jīng)提交的事物卻沒(méi)有回滾?

查看相關(guān)spring的文檔后發(fā)現(xiàn),原來(lái)spring聲明式事務(wù)管理默認(rèn)對(duì)非檢查型異常和運(yùn)行時(shí)異常進(jìn)行事務(wù)回滾,而對(duì)檢查型異常則不進(jìn)行回滾操作。

代碼中try……catch拋出的Exception異常,屬于檢查型異常,Spring的框架默認(rèn)是不會(huì)進(jìn)行回滾的。

在編程中對(duì)非檢查型類異常可以不用捕獲,而檢查型異常則必須用try語(yǔ)句塊進(jìn)行處理或者把異常交給上級(jí)方法處理總之就是必須寫(xiě)代碼處理它。

所以必須在service捕獲異常,然后再次手動(dòng)throw一個(gè)非檢查型異常,這樣事務(wù)方才起效。例如:

try{ 
  ………… 
} catch (Exception e) { 
  ………… 
  throw new BusinessException(e.getMessage()); 
} 

當(dāng)然我們還有更簡(jiǎn)便的方法來(lái)解決這個(gè)問(wèn)題,那就是通過(guò)注解參數(shù)改變默認(rèn)的回滾方式。

在@Transaction注解中定義了noRollbackFor和RollbackFor來(lái)指定某種異常是否回滾。

使用例:

@Transaction(noRollbackFor=RuntimeException.class)

@Transaction(RollbackFor=Exception.class)

所以上述的問(wèn)題可以直接將@Transaction添加回滾參數(shù)@Transaction(RollbackFor=Exception.class),這樣就改變了默認(rèn)的事務(wù)處理方式。

啟示:

這就要求我們?cè)谧远x異常的時(shí)候,讓自定義的異常繼承自RuntimeException,這樣拋出的時(shí)候才會(huì)被Spring默認(rèn)的事務(wù)處理準(zhǔn)確處理。

總結(jié)

以上就是本文關(guān)于java事務(wù)回滾失敗問(wèn)題分析的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • elasticsearch插件開(kāi)發(fā)教程

    elasticsearch插件開(kāi)發(fā)教程

    這篇文章主要為大家詳細(xì)介紹了elasticsearch插件開(kāi)發(fā)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • SpringBoot+Dubbo+Seata分布式事務(wù)實(shí)戰(zhàn)詳解

    SpringBoot+Dubbo+Seata分布式事務(wù)實(shí)戰(zhàn)詳解

    這篇文章主要介紹了SpringBoot+Dubbo+Seata分布式事務(wù)實(shí)戰(zhàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Java+Spring+MySql環(huán)境中安裝和配置MyBatis的教程

    Java+Spring+MySql環(huán)境中安裝和配置MyBatis的教程

    這篇文章主要介紹了Java+Spring+MySql環(huán)境中安裝和配置MyBatis的教程,MyBatis一般被用來(lái)增強(qiáng)數(shù)據(jù)庫(kù)操作,文中對(duì)MyBatis的主配置文件有較為詳細(xì)的講解,需要的朋友可以參考下
    2016-04-04
  • SpringBoot實(shí)現(xiàn)動(dòng)態(tài)多線程并發(fā)定時(shí)任務(wù)

    SpringBoot實(shí)現(xiàn)動(dòng)態(tài)多線程并發(fā)定時(shí)任務(wù)

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)動(dòng)態(tài)多線程并發(fā)定時(shí)任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • SpringCloud2020 bootstrap 配置文件失效的解決方法

    SpringCloud2020 bootstrap 配置文件失效的解決方法

    這篇文章主要介紹了SpringCloud2020 bootstrap 配置文件失效的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Spring Boot示例代碼整合Redis詳解

    Spring Boot示例代碼整合Redis詳解

    SpringBoot對(duì)常用的數(shù)據(jù)庫(kù)支持外,對(duì)NoSQL 數(shù)據(jù)庫(kù)也進(jìn)行了封裝自動(dòng)化,下面這篇文章主要給大家介紹了關(guān)于springboot使用redis的詳細(xì)步驟,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Spring Boot使用RestTemplate消費(fèi)REST服務(wù)的幾個(gè)問(wèn)題記錄

    Spring Boot使用RestTemplate消費(fèi)REST服務(wù)的幾個(gè)問(wèn)題記錄

    這篇文章主要介紹了Spring Boot使用RestTemplate消費(fèi)REST服務(wù)的幾個(gè)問(wèn)題記錄,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • maven打包失敗踩坑的解決方式詳解

    maven打包失敗踩坑的解決方式詳解

    最近因?yàn)樾马?xiàng)目有很多自定義的jar包,而且占內(nèi)存很多,就直接拷貝過(guò)來(lái),新開(kāi)了一個(gè)maven倉(cāng)庫(kù),用的時(shí)候沒(méi)有問(wèn)題,但是打包一直編譯不通過(guò),下面這篇文章主要給大家介紹了關(guān)于maven打包失敗踩坑的解決方式,需要的朋友可以參考下
    2023-05-05
  • 淺談spring-boot 允許接口跨域并實(shí)現(xiàn)攔截(CORS)

    淺談spring-boot 允許接口跨域并實(shí)現(xiàn)攔截(CORS)

    本篇文章主要介紹了淺談spring-boot 允許接口跨域并實(shí)現(xiàn)攔截(CORS),具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • Mybatis 動(dòng)態(tài)sql if 判讀條件等于一個(gè)數(shù)字的案例

    Mybatis 動(dòng)態(tài)sql if 判讀條件等于一個(gè)數(shù)字的案例

    這篇文章主要介紹了Mybatis 動(dòng)態(tài)sql if 判讀條件等于一個(gè)數(shù)字的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11

最新評(píng)論