本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
日常Bug排查-抛异常不回滚
kenrry1992 · 230浏览 · 发布于2021-06-07 +关注

前言

日常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的时候才会回滚!好了,让业务开发改了下代码,问题解决了。

总结

遇到问题时,找到出问题代码段和类似的正确代码段的不同处,以此为切入,往往能抓住线索。


相关推荐

PHP实现部分字符隐藏

沙雕mars · 1327浏览 · 2019-04-28 09:47:56
Java中ArrayList和LinkedList区别

kenrry1992 · 912浏览 · 2019-05-08 21:14:54
Tomcat 下载及安装配置

manongba · 976浏览 · 2019-05-13 21:03:56
JAVA变量介绍

manongba · 965浏览 · 2019-05-13 21:05:52
什么是SpringBoot

iamitnan · 1092浏览 · 2019-05-14 22:20:36
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页