Spring中如何进行日常Bug排查
这篇文章将为大家详细讲解有关Spring中如何进行日常Bug排查,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
创新互联建站致力于互联网网站建设与网站营销,提供网站设计、成都网站制作、网站开发、seo优化、网站排名、互联网营销、小程序开发、公众号商城、等建站开发,创新互联建站网站建设策划专家,为不同类型的客户提供良好的互联网应用定制解决方案,帮助客户在新的全球化互联网环境中保持优势。
前言
日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材^_^。
Bug现场
最近有人反映java应用操作数据库的时候,抛异常不回滚。这还了得,不过笔者笃定肯定是用法的锅,不然就全乱套了。所以笔者去Review他的代码。
代码片段
@Transacion(value="x") public void s1() throw MyException{ update(1); throwBusinessException(); update(2); }
乍看上去没啥问题。
思路
笔者用@Transaction注解也用了好几年了,从来没遇到过抛异常不回滚的情况。看他的用法也和笔者差不多呀?
然后笔者稍微思索了会,发现我写的代码和出问题的这一段稍稍有些不一样。我是这么写的:
@Transacion(value="transManager") public void s1(){ update(1); update(2); }
貌似我从来没有在函数上加过throw MyException,难道是这段有问题?翻看MyException代码,发现它仅仅继承了Exception。
class MyEception extends Exception { }
好像就这点不一样。而笔者自定义的Exception基本继承了RuntimeException的。
翻下Spring源码
按照这个思路,笔者去翻了下Spring的源码,看下它在声明式事务中的处理逻辑到底是什么,于是翻到了这一段处理事务异常的代码:
TransactionAspectSupport.java protected void completeTransactionAfterThrowing(TransactionInfo txInfo, Throwable ex) { if (txInfo.transactionAttribute.rollbackOn(ex)) { }else{ // We don't roll back on this exception. // Will still roll back if TransactionStatus.isRollbackOnly() is true. // 在checkedException的时候,不会被rollBack,会commit!!! } } @Override public boolean rollbackOn(Throwable ex) { return (ex instanceof RuntimeException || ex instanceof Error); }
关于“Spring中如何进行日常Bug排查”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
当前标题:Spring中如何进行日常Bug排查
文章路径:http://myzitong.com/article/ihdojg.html