当前位置:   article > 正文

try-catch简单用法-事务回滚Transactional_try catch 回滚

try catch 回滚

目录

exception对象的常用方法:

事务及回滚

下图为打印的错误日志


exception对象的常用方法:

  1. try {
  2. PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
  3. List<MdaDataAcquisitionDTO> list = mdaDataAcquisitionService.getPage(dto);
  4. PageInfo<MdaDataAcquisitionDTO> pageInfo = new PageInfo<MdaDataAcquisitionDTO>(list);
  5. return ApiResult.ok(pageInfo);
  6. }catch (BadSqlGrammarException e) {
  7. logger.error(e.getMessage());
  8. logger.error(e.toString());
  9. logger.error("1111111111111111111111");
  10. e.printStackTrace();
  11. return ApiResult.error(ErrorMessage.INTERNAL_SERVER_ERROR);
  12. }catch (Exception e) {//Exception范围要大于上一catch
  13. logger.error(e.getMessage());
  14. logger.error(e.toString());
  15. logger.error("1111111111111111111111");
  16. e.printStackTrace();//输出错误堆栈信息
  17. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  18. return ApiResult.error(ErrorMessage.INTERNAL_SERVER_ERROR);
  19. }finally {
  20. }

exception对象的常用方法:

方     法说     明
  getMessage()    返回exception对象的异常信息字符串  
  getLocalizedmessage()    返回本地化的异常错误
  toString()    返回关于异常错误的简单信息描述  
  fillInStackTrace()    重写异常错误的栈执行轨迹  

e.printStackTrace() 会导致锁死?一般不推荐

短时间内大量请求访问此接口 -> 代码本身有问题,很多情况下抛异常  -> e.printStackTrace() 来打印异常到控制台 -> 产生错误堆栈字符串到字符串池内存空间 -> 此内存空间一下子被占满了 -> 开始在此内存空间产出字符串的线程还没完全生产完整,就没空间了 ->  大量线程产出字符串产出到一半,等在这儿(等有内存了继续搞啊)-> 相互等待,等内存,锁死了,整个应用挂掉了。

综上,这就是 e.printStackTrace()  引发的血案。

总结当然重要,有3点:

    1,代码质量啊亲,代码可以不抛异常咱。

    2,不要使用 e.printStackTrace() 啊,这玩意儿,在项目发布后,除过不断的刷控制台,并没用什么卵用啊,可以用 log 对象输出到日志文件里面啊。

    3,推及开来,在java中,会产生大量字符串的方法,使用时,一定得悠着点,别一不小心撑到肚子(字符串池所属的那么点非堆内存空间),撑到肚子了,会死的啊 。

*代码执行的顺序:
  *1.try内的代码从出现异常的那一行开始,中断执行
  *2.执行对应的catch块内的代码
  *3.继续执行try catch 结构之后的代码
  *注意点:
  *1.如果catch内的异常类存在子父类的关系,那么子类应该在前,父类在后
  *2.如果finally中有return语句,那么最后返回的结果肯定以finally中的返回值为准
  *3.如果finally语句中有return,那么没有被处理的异常将会被吞掉
  *重写的注意点:
  *1.儿子不能比父亲的本事大
  *2.儿子要比父亲开放
  *3.儿子不能比父亲惹更大的麻烦(子类的异常的类型不能是父类的异常的父类型)
  *异常类Api:
  *1.getMessage():获取异常描述信息字符串
  *2.toString():返回异常类的包路径和类名和异常描述信息字符串
  *3.printStackTrace():除了打印toString的信息外,还要打印堆栈信息
————————————————
版权声明:本文为CSDN博主「静夜思乡」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wanghuiwei888/article/details/78818203

事务及回滚

spring-事务注解:

import org.springframework.transaction.annotation.Transactional;
@Transactional

1 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)

2 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)

3 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)

https://blog.csdn.net/qq_27828675/article/details/80499839

https://www.cnblogs.com/caoyc/p/5632963.html

https://www.baidu.com/link?url=Lol4OWtcXjiRD01_Hew1T7wNfTjr_G4sECKJn29iNKzyfgNunIrqAOr8cglx2lCE3qs77ONaZRCKxv5SL7qIZa&wd=&eqid=cab0f95a0006126d000000026077feb4

事物是程序运行如果没有错误,会自动提交事物,如果程序运行发生异常,则会自动回滚。
如果使用了try捕获异常时.一定要在catch里面手动回滚。
事物手动回滚代码
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

import org.springframework.transaction.interceptor.TransactionAspectSupport;

下图为打印的错误日志

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/630181
推荐阅读
相关标签
  

闽ICP备14008679号