成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

日常Bug排查-拋異常不回滾

開發 前端
最近有人反映java應用操作數據庫的時候,拋異常不回滾。這還了得,不過筆者篤定肯定是用法的鍋,不然就全亂套了。所以筆者去Review他的代碼。

[[404090]]

 前言

日常Bug排查系列都是一些簡單Bug排查,筆者將在這里介紹一些排查Bug的簡單技巧,同時順便積累素材^_^。

Bug現場

最近有人反映java應用操作數據庫的時候,拋異常不回滾。這還了得,不過筆者篤定肯定是用法的鍋,不然就全亂套了。所以筆者去Review他的代碼。

代碼片段

  1. @Transacion(value="x")  
  2. public void s1() throw MyException{  
  3.     update(1);  
  4.     throwBusinessException(); 
  5.     update(2);  

乍看上去沒啥問題。

思路

筆者用@Transaction注解也用了好幾年了,從來沒遇到過拋異常不回滾的情況。看他的用法也和筆者差不多呀?

然后筆者稍微思索了會,發現我寫的代碼和出問題的這一段稍稍有些不一樣。我是這么寫的:

  1. @Transacion(value="transManager")  
  2. public void s1(){  
  3.     update(1);  
  4.     update(2);  

貌似我從來沒有在函數上加過throw MyException,難道是這段有問題?翻看MyException代碼,發現它僅僅繼承了Exception。

  1. class MyEception extends Exception { 

好像就這點不一樣。而筆者自定義的Exception基本繼承了RuntimeException的。

翻下Spring源碼

按照這個思路,筆者去翻了下Spring的源碼,看下它在聲明式事務中的處理邏輯到底是什么,于是翻到了這一段處理事務異常的代碼:

  1. TransactionAspectSupport.java 
  2. protected void completeTransactionAfterThrowing(TransactionInfo txInfo, Throwable ex) { 
  3.     if (txInfo.transactionAttribute.rollbackOn(ex)) { 
  4.     }else
  5.         // We don't roll back on this exception. 
  6.         // Will still roll back if TransactionStatus.isRollbackOnly() is true
  7.         // 在checkedException的時候,不會被rollBack,會commit!!! 
  8.     } 
  9. @Override 
  10. public boolean rollbackOn(Throwable ex) { 
  11.     return (ex instanceof RuntimeException || ex instanceof Error); 

看代碼邏輯就明白了,只有異常繼承RuntimeException或者Error的時候才會回滾!好了,讓業務開發改了下代碼,問題解決了。

總結

遇到問題時,找到出問題代碼段和類似的正確代碼段的不同處,以此為切入,往往能抓住線索。

本文轉載自微信公眾號「解Bug之路」,可以通過以下二維碼關注。轉載本文請聯系解Bug之路公眾號。

 

責任編輯:武曉燕 來源: 解Bug之路
相關推薦

2021-06-15 16:17:19

Commit報錯事務

2021-06-04 11:33:50

消息技巧排查

2024-05-13 10:21:43

Bug排查TCP

2021-05-19 14:03:48

磁盤故障

2021-05-20 10:02:50

系統Redis技巧

2022-09-25 22:12:07

事務SpringBoot

2022-12-28 08:17:19

異常處理code

2021-07-15 23:16:09

IO異常排查

2025-03-17 10:01:07

2011-12-21 11:18:59

Java

2021-03-01 08:16:44

Linux 內核代碼

2022-09-24 13:21:34

Java服務異常

2023-02-02 08:56:25

線程池線程submit

2024-08-29 08:54:35

2020-11-18 10:16:52

數據庫回滾事務

2020-07-08 07:50:50

OOM虛擬機Java

2025-02-05 14:28:19

2024-10-28 11:07:33

磁盤目錄文件

2019-04-11 08:45:27

2021-03-11 14:28:11

bugLinux內核
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91av在线视频观看 | 狠狠婷婷综合久久久久久妖精 | 日韩精品在线播放 | 精品国产乱码久久久久久中文 | 国产小视频在线 | 九色国产 | 综合精品 | 免费看91| 亚洲精品一区二区三区蜜桃久 | 欧美精品在线免费观看 | 超碰日本 | 国产欧美一区二区三区久久手机版 | 欧美一区二区在线播放 | 久久99国产精品 | 国产欧美一区二区三区久久手机版 | 福利影院在线看 | 国产高清在线 | 狠狠艹| 国产精品国产a级 | 亚洲国产精品久久久 | 欧美区在线 | 91伦理片| 草比av| 在线观看黄色大片 | 一区二区日韩 | 欧美日韩综合一区 | 国产清纯白嫩初高生在线播放视频 | 欧美日韩专区 | 亚洲成人精品一区 | 欧美性网站 | 国产精品一码二码三码在线 | 精品国产免费人成在线观看 | 日韩波多野结衣 | 亚洲人va欧美va人人爽 | 日韩资源 | 国产精品视频区 | 91精品一区 | 一区二区免费在线视频 | 啪一啪| 日韩在线一区二区三区 | 久久久久久亚洲 |