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

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

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

[[404090]]

 前言

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

Bug現(xiàn)場(chǎng)

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

代碼片段

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

乍看上去沒啥問題。

思路

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

然后筆者稍微思索了會(huì),發(fā)現(xiàn)我寫的代碼和出問題的這一段稍稍有些不一樣。我是這么寫的:

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

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

  1. class MyEception extends Exception { 

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

翻下Spring源碼

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

  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的時(shí)候,不會(huì)被rollBack,會(huì)commit!!! 
  8.     } 
  9. @Override 
  10. public boolean rollbackOn(Throwable ex) { 
  11.     return (ex instanceof RuntimeException || ex instanceof Error); 

看代碼邏輯就明白了,只有異常繼承RuntimeException或者Error的時(shí)候才會(huì)回滾!好了,讓業(yè)務(wù)開發(fā)改了下代碼,問題解決了。

總結(jié)

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

本文轉(zhuǎn)載自微信公眾號(hào)「解Bug之路」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系解Bug之路公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: 解Bug之路
相關(guān)推薦

2021-06-04 11:33:50

消息技巧排查

2021-06-15 16:17:19

Commit報(bào)錯(cuò)事務(wù)

2024-05-13 10:21:43

Bug排查TCP

2021-05-19 14:03:48

磁盤故障時(shí)

2021-05-20 10:02:50

系統(tǒng)Redis技巧

2022-09-25 22:12:07

事務(wù)SpringBoot

2022-12-28 08:17:19

異常處理code

2021-07-15 23:16:09

IO異常排查

2025-03-17 10:01:07

2022-09-24 13:21:34

Java服務(wù)異常

2011-12-21 11:18:59

Java

2021-03-01 08:16:44

Linux 內(nèi)核代碼

2020-11-18 10:16:52

數(shù)據(jù)庫回滾事務(wù)

2024-08-29 08:54:35

2023-02-02 08:56:25

線程池線程submit

2024-10-28 11:07:33

磁盤目錄文件

2020-07-08 07:50:50

OOM虛擬機(jī)Java

2025-02-05 14:28:19

2019-04-11 08:45:27

2021-03-11 14:28:11

bugLinux內(nèi)核
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美在线不卡 | 青草青草久热精品视频在线观看 | 欧美精品在欧美一区二区少妇 | 国产成人精品一区二区三区网站观看 | 亚洲精品在线视频 | 欧美视频网 | 欧美激情精品久久久久久 | a级免费视频 | 亚洲精品精品 | 国产午夜精品久久久 | 久久精品一区二区三区四区 | 成人在线观看免费 | 日韩免费看视频 | 久久久久九九九女人毛片 | 亚洲精品乱码久久久久久按摩观 | 伦理二区 | 国产精品久久久久久久一区探花 | 99在线国产 | 成人国产在线观看 | 亚洲精品久久久久久一区二区 | 五月激情婷婷在线 | 欧美日韩精品 | 久久久久亚洲视频 | 99精品欧美一区二区三区综合在线 | 成人不卡 | 97精品超碰一区二区三区 | 色久影院| 免费在线h视频 | 黄网站涩免费蜜桃网站 | 日韩精品一区二区三区老鸭窝 | 成人影院在线 | 成人欧美一区二区三区黑人孕妇 | 精品在线一区 | 国产精品不卡 | 91在线免费视频 | 欧美精品久久久 | 亚洲a视频| 天天影视网天天综合色在线播放 | 成人精品视频在线观看 | 久草久草久草 | 欧美一级免费看 |