最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

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

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

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

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

再回過來看我的代碼:

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)用的時候,try……catch拋Exception異常已經(jīng)提交的事物卻沒有回滾?

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

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

在編程中對非檢查型類異??梢圆挥貌东@,而檢查型異常則必須用try語句塊進(jìn)行處理或者把異常交給上級方法處理總之就是必須寫代碼處理它。

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

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

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

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

使用例:

@Transaction(noRollbackFor=RuntimeException.class)

@Transaction(RollbackFor=Exception.class)

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

啟示:

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

總結(jié)

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

相關(guān)文章

  • Spring Boot連接超時導(dǎo)致502錯誤的實(shí)戰(zhàn)案例

    Spring Boot連接超時導(dǎo)致502錯誤的實(shí)戰(zhàn)案例

    這篇文章主要給大家介紹了關(guān)于Spring Boot連接超時導(dǎo)致502錯誤的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java 數(shù)據(jù)類型有哪些取值范圍多少

    java 數(shù)據(jù)類型有哪些取值范圍多少

    這篇文章主要介紹了java 數(shù)據(jù)類型有哪些取值范圍多少的相關(guān)資料,網(wǎng)上關(guān)于java 數(shù)據(jù)類型的資料有很多,不夠全面,這里就整理下,需要的朋友可以參考下
    2017-01-01
  • 深入了解Java設(shè)計模式之UML類圖

    深入了解Java設(shè)計模式之UML類圖

    UML?即?Unified?Modeling?Language?統(tǒng)一建模語言,是用來設(shè)計軟件的可視化建模語言。本文就帶大家了解一下UML中類圖的定義與使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-11-11
  • Spring和IDEA不推薦使用@Autowired?注解原因解析

    Spring和IDEA不推薦使用@Autowired?注解原因解析

    這篇文章主要為大家介紹了Spring和IDEA不推薦使用@Autowired?注解原因解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • springMVC框架下JQuery傳遞并解析Json數(shù)據(jù)

    springMVC框架下JQuery傳遞并解析Json數(shù)據(jù)

    json作為一種輕量級的數(shù)據(jù)交換格式,在前后臺數(shù)據(jù)交換中占據(jù)著非常重要的地位,這篇文章主要介紹了springMVC框架下JQuery傳遞并解析Json數(shù)據(jù),有興趣的可以了解一下。
    2017-01-01
  • Java編程實(shí)現(xiàn)直接插入排序代碼示例

    Java編程實(shí)現(xiàn)直接插入排序代碼示例

    這篇文章主要介紹了Java編程實(shí)現(xiàn)直接插入排序代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java前后端分離項目跨域問題解決方案

    Java前后端分離項目跨域問題解決方案

    本文主要介紹了Java前后端分離項目跨域問題解決方案,其中后端基于SpringBoot,前端使用了jQuery、axios等框架,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Java實(shí)現(xiàn)截圖小工具的完整代碼

    Java實(shí)現(xiàn)截圖小工具的完整代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)截圖小工具的完整代碼,用Java的圖形用戶界面GUI技術(shù)寫了一個電腦截圖小工具,本程序代碼簡單,涉及到異常處理,事件處理,圖形用戶界面等,需要的朋友可以參考下
    2022-05-05
  • Mybatis批量修改的操作代碼

    Mybatis批量修改的操作代碼

    這篇文章主要介紹了Mybatis批量修改的操作代碼,包括整體批量修改的詳細(xì)代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2017-09-09
  • spring?boot入門之誕生背景及優(yōu)勢影響

    spring?boot入門之誕生背景及優(yōu)勢影響

    這篇文章主要為大家描述說明了介紹了spring?boot誕生的背景以及其產(chǎn)生的優(yōu)勢影響,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03

最新評論

兰西县| 玉溪市| 红安县| 隆德县| 德安县| 柘城县| 姚安县| 内江市| 雷波县| 洞口县| 扬州市| 嘉兴市| 金坛市| 桐城市| 新邵县| 资溪县| 阳信县| 赞皇县| 莲花县| 来安县| 通江县| 西宁市| 南充市| 宣恩县| 南开区| 万全县| 驻马店市| 郑州市| 惠水县| 陇西县| 蓬安县| 鞍山市| 连江县| 个旧市| 邯郸市| 桃园市| 得荣县| 南漳县| 张家口市| 阳泉市| 台湾省|