Java 业务开发常见错误 100 例
朱晔
贝壳金服资深架构师
立即订阅
4513 人已学习
课程目录
已更新 15 讲 / 共 37 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 业务代码真的会有这么多坑?
免费
代码篇 (12讲)
01 | 使用了并发工具类库,线程安全就高枕无忧了吗?
02 | 代码加锁:不要让“锁”事成为烦心事
03 | 线程池:业务代码最常用也最容易犯错的组件
04 | 连接池:别让连接池帮了倒忙
05 | HTTP调用:你考虑到超时、重试、并发了吗?
06 | 20%的业务代码的Spring声明式事务,可能都没处理正确
07 | 数据库索引:索引并不是万能药
08 | 判等问题:程序里如何确定你就是你?
09 | 数值计算:注意精度、舍入和溢出问题
10 | 集合类:坑满地的List列表操作
11 | 空值处理:分不清楚的null和恼人的空指针
12 | 异常处理:别让自己在出问题的时候变为瞎子
不定期加餐 (2讲)
加餐1 | 带你吃透课程中Java 8的那些重要知识点(上)
加餐2 | 带你吃透课程中Java 8的那些重要知识点(下)
Java 业务开发常见错误 100 例
登录|注册

12 | 异常处理:别让自己在出问题的时候变为瞎子

朱晔 2020-04-04
你好,我是朱晔。今天,我来和你聊聊异常处理容易踩的坑。
应用程序避免不了出异常,捕获和处理异常是考验编程功力的一个精细活。一些业务项目中,我曾看到开发同学在开发业务逻辑时不考虑任何异常处理,项目接近完成时再采用“流水线”的方式进行异常处理,也就是统一为所有方法打上 try…catch…捕获所有异常记录日志,有些技巧的同学可能会使用 AOP 来进行类似的“统一异常处理”。
其实,这种处理异常的方式非常不可取。那么今天,我就和你分享下不可取的原因、与异常处理相关的坑和最佳实践。

捕获和处理异常容易犯的错

“统一异常处理”方式正是我要说的第一个错:不在业务代码层面考虑异常处理,仅在框架层面粗犷捕获和处理异常
为了理解错在何处,我们先来看看大多数业务应用都采用的三层架构:
Controller 层负责信息收集、参数校验、转换服务层处理的数据适配前端,轻业务逻辑;
Service 层负责核心业务逻辑,包括各种外部服务调用、访问数据库、缓存处理、消息处理等;
Repository 层负责数据访问实现,一般没有业务逻辑。
每层架构的工作性质不同,且从业务性质上异常可能分为业务异常和系统异常两大类,这就决定了很难进行统一的异常处理。我们从底向上看一下三层架构:
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Java 业务开发常见错误 100 例》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(5)

  • 行者
    老师,关于 千万别把异常定义为静态变量,麻烦分析下为什么cancelOrderRight抛出的异常信息指向createOrderWrong所在的行~

    作者回复: 创建异常的时候一次性fillInStackTrace了,除非这样:

    BusinessException ex = Exceptions.ORDEREXISTS;
    ex.fillInStackTrace();
    throw ex;

    2020-04-04
    1
    1
  • 努力奋斗的Pisces
    1.得看finally里面是怎么处理的了,除非finally没有执行到,或者是finally里面报错了,不然都是按照finally里面的返回值做最终的返回吧
    2020-04-04
    1
  • 行者
    IllegalArgumentException: 入参错误,比如参数类型int输入string。
    IllegalStateException: 状态错误,比如订单已经支付完成,二次请求支付接口。
    UnsupportedOperationException: 不支持操作错误,比如对一笔不能退款的订单退款。
    其他异常
    SecurityException: 权限错误,比如未登陆用户调用修改用户信息接口。

    作者回复: 不错

    2020-04-04
  • 梦倚栏杆
    现在出问题就是瞎子,一点一点的日志的打,上线,哎,这哪是个合格的RD呀
    2020-04-04
  • 旭东
    订单存在异常,这个例子实际开发中真需要区分吗?个人觉得无效参数的例子更好些
    2020-04-04
收起评论
5
返回
顶部