当前位置: 首页 > news >正文

Exception异常处理实战案例

Java Exception 异常处理实战案例(生产级)
本文基于 Spring Boot 3.x + JDK 17+ 环境,覆盖日常开发中 90% 以上的异常处理场景,包含错误写法 vs 正确写法对比、最佳实践和生产级完整方案。

一、异常处理核心原则(先记牢)

  • 不要吞异常:catch 块不能为空,至少要打印日志
  • 异常要带上下文:必须包含触发异常的参数、业务 ID 等关键信息
  • 分层处理:Controller 层统一返回格式,Service 层抛出业务异常,DAO 层不处理异常
  • 区分异常类型:业务异常(用户可理解)vs 系统异常(开发需排查)
  • 资源必须释放:使用 try-with-resources 自动关闭流、连接等资源

二、基础场景实战

场景 1:资源释放(最容易踩坑)

错误写法(资源泄漏)

// 问题:如果 read() 抛出异常,inputStream 永远不会关闭publicStringreadFile(Stringpath)throwsIOException{FileInputStreaminputStream=newFileInputStream(path);byte[]buffer=newbyte[1024];intlen=inputStream.read(buffer);inputStream.close();// 异常时执行不到returnnewString(buffer,0,len);}

正确写法(try-with-resources)

// 所有实现 AutoCloseable 接口的类都可以用(流、连接、Socket 等)publicStringreadFile(Stringpath)throwsIOException{try(FileInputStreaminputStream=newFileInputStream(path)){byte[]buffer=newbyte[1024];intlen=inputStream.read(buffer);returnnewString(buffer,0,len);}// 自动关闭资源,无论是否抛出异常}

场景 2:不要吞异常

错误写法(最致命的错误)

// 问题:异常被完全吞掉,出问题时根本不知道哪里错了publicvoidupdateUser(Useruser){try{userMapper.updateById(user);}catch(Exceptione){// 空 catch 块,什么都不做}}

正确写法(至少打印日志 + 保留异常链)

importlombok.extern.slf4j.Slf4j;@Slf4jpublicclassUserService{publicvoidupdateUser(Useruser){try{userMapper.updateById(user);}catch(Exceptione){// 必须打印异常堆栈 + 关键参数log.error("更新用户失败,用户 ID:{}",user.getId(),e);// 或者向上抛出异常thrownewRuntimeException("更新用户失败",e);}}}

场景 3:异常信息要带上下文

错误写法(信息不足,无法排查)

// 问题:只打印 "查询失败",不知道查什么、参数是什么publicUsergetUserById(Longid){try{returnuserMapper.selectById(id);}catch(Exceptione){log.error("查询失败",e);thrownewRuntimeException("查询失败");}}

正确写法(包含关键业务参数)

publicUsergetUserById(Longid){try{Useruser=userMapper.selectById(id
http://www.gsyq.cn/news/1458666.html

相关文章:

  • 梧州市2026年最新黄金回收白银回收铂金回收门店排行榜及联系方式电话推荐 - 盛世金银回收
  • Docker里装MySQL 8.0,大小写敏感这个坑我帮你踩了(附完美解决方案)
  • 计算机毕业设计之基于Hadoop的短视频推荐系统的设计与实现
  • 边缘AI赋能物联网,芯科科技推动智能边缘创新
  • 百考通:AI智能化一键生成每一份调研,设计都高效落地
  • 如何快速将HDRI转换为立方体贴图:免费开源工具终极指南
  • 2026 实测盘点|6 款主流配音软件精选,免费好用不踩坑
  • 武汉市2026年最新黄金回收白银回收铂金回收门店排行榜及联系方式电话推荐 - 盛世金银回收
  • Gemini 3.1 Pro 实测:长上下文推理速度翻倍的技术真相
  • 新手必看:用Keil的Debug功能精确测量51单片机流水灯延时(附STC89C52配置)
  • 用Python和jieba分析年报可读性:从会计词典处理到结果导出的完整实战
  • 2025亲测降AI率工具推荐:免费降AIGC实用指南
  • 告别重复造轮子:用快马AI一键生成微信小程序后台管理模块代码
  • Codex Skill 保姆级教程 1:Computer Use — 让 AI 接管整台电脑
  • 过来人劝告2026年还在手动盲选营销推广渠道不细算?这4款免费神器亲测好用到哭!
  • 分析 Redis AOF 覆写期间后台子进程对前台高频 MySQL慢查询定位与执行计划EXPLAIN 写入导致的延迟毛刺隐患
  • Gemini 3.1 Pro长对话认知退化实测与抗衰减工程实践
  • 模块化客户评估系统:业务可解释、策略可调节的AI决策辅助设计
  • 2026 南京全区域工装甄选指南|商铺 / 门面 / 办公室 / 商城改造 3 家合规正规工装企业实测盘点 + 详细避坑攻略 - 本地便民网
  • 宁德市2026年最新黄金回收白银回收铂金回收门店排行榜+联系方式电话推荐 - 大熊猫898989
  • 图像去噪/超分论文实验必备:用MATLAB批量计算PSNR和SSIM的完整脚本
  • 第十七天课程(基础)
  • 3大核心优势:douyin-downloader如何成为抖音内容管理的智能解决方案
  • 攀枝花市2026年最新黄金回收白银回收铂金回收门店排行榜+联系方式电话推荐 - 大熊猫898989
  • Matlab多变量时序预测工具包:CNN单步回归建模,含数据模板、可视化图表与评估指标
  • 从USRP N310到自研平台:聊聊用开源SDR硬件做5G原型验证的成本与可行性
  • 别再硬啃手册了!用C++搞定FANUC CNC数据采集,这8个关键参数和API调用示例直接抄
  • SpringBoot+Vue船舶物料供应商交易平台源码+论文
  • mac 安装 Neo4j 图数据库
  • 2026年国内口碑较好的EFT脉冲群滤波器公司,哪家更靠谱?