- 博客(19)
- 收藏
- 关注
原创 Spring Boot整合Elasticsearch实战:被产品经理追着改搜索后,我让查询从10秒飙到200毫秒!
《政务门户搜索优化实战:从MySQL慢查询到Elasticsearch秒级响应》 本文基于真实政务项目,针对MySQL模糊查询性能差(12.8秒/次)、用户投诉激增40%的问题,详细记录Elasticsearch改造全过程。通过三组对比数据揭示ES优势(查询8.2秒→0.18秒),提供SpringBoot整合ES的五步避坑方案:严格版本匹配、IK中文分词配置、高亮权重查询设计、MySQL数据同步及生产级运维技巧(如IK词典热更新)。最终实现搜索响应200毫秒内,用户满意度提升至96分,日均承载50万请求。文
2026-02-08 21:19:46
881
原创 MyBatis-Plus多数据源实战:被DBA追着改配置后,我肝出这份避坑指南(附动态切换源码)
本文基于真实政务系统数据迁移项目,详细介绍了dynamic-datasource多数据源配置的最佳实践。作者通过血泪教训总结出关键要点:在非分库分表场景下,dynamic-datasource是最佳选择。文章提供了从Maven依赖、YML配置到代码级切换的完整解决方案,重点讲解了生产环境必须注意的事务处理、连接泄漏监控等核心问题,并分享了零停机迁移的四步操作法和监控方案。最后强调技术人应对数据保持敬畏,提出了配置注释、双人复核等工程规范。全文包含大量实战经验,对需要处理多数据源的开发者具有重要参考价值。
2026-02-07 23:34:53
895
原创 Spring Boot统一异常处理:从被测试怼哭到架构组点赞的实战蜕变
/ 1. 基础业务异常(带错误码)// 如 BIZ.USER_NOT_FOUND// 国际化参数// 2. 错误码枚举(按模块划分)@Getter// 用户模块USER_NOT_FOUND("USER.001", "用户不存在"),USER_FROZEN("USER.002", "账号已被冻结"),// 订单模块ORDER_AMOUNT_INVALID("ORDER.001", "订单金额异常"),ORDER_TIMEOUT("ORDER.002", "订单已超时");
2026-02-06 22:39:35
745
原创 Spring Boot整合Redis:连接池崩了?缓存雪崩?这份生产级实战指南请收好
《Redis高可用实践:血泪教训与生产级配置指南》 本文基于千万级电商平台重构经验,分享Redis高可用整合方案。通过真实事故案例(618大促连接池耗尽引发服务雪崩),详解生产级配置:连接池动态计算公式(max-active≈(QPS×RT)/1000×1.5)、Jackson序列化解决跨服务ClassCastException问题、防御缓存穿透/击穿/雪崩的三重策略(布隆过滤器+逻辑过期+多级缓存)。强调压测必要性(JMeter模拟峰值)、配置即代码原则,并提供监控方案(Actuator端点+连接池健康检
2026-02-05 23:48:21
1214
原创 Spring Boot实战:用AOP+自定义注解打造零侵入日志系统(附生产避坑指南)
本文介绍了如何利用AOP+自定义注解优化日志记录方案。针对传统日志记录方式存在代码侵入性强、维护成本高、敏感信息泄露等问题,提出了一种非侵入式的解决方案。通过定义@OptLog注解标记操作方法,配合切面统一处理日志记录、参数脱敏、耗时统计等功能。方案采用异步线程池提升性能,支持按操作类型聚合分析,已在千万级请求系统中稳定运行2年+。相比传统方式,新方案使代码更简洁、维护更便捷、安全性更高,并能复用于接口监控、操作审计等场景。
2026-02-04 22:26:50
765
原创 JPA懒加载踩坑实录:一次线上接口“龟速”排查手记
摘要:作者复盘了一个JavaEE项目中的JPA性能问题。用户详情接口因N+1查询导致P99飙升至12秒,根源是OpenSessionInView配置导致懒加载在JSON序列化时触发大量查询。提出了三种优化方案:1)使用@EntityGraph显式JOIN查询;2)DTO裁剪+手动组装;3)谨慎调整FetchType(不推荐)。总结了避坑清单,强调要关闭OSIV、使用DTO返回、避免无意识懒加载。作者提醒开发时要敬畏代码性能,避免因偷懒导致线上事故。本文为实战经验分享,旨在帮助开发者规避JPA常见性能陷阱。
2026-02-03 23:22:59
594
原创 JavaEE项目全局异常处理实战:从Filter到ExceptionMapper的优雅演进
本文分享了在纯JavaEE项目中构建全局异常处理的实战经验。作者针对企业级项目常见的异常裸奔问题,提出了两种解决方案:Servlet Filter方案适用于传统架构,能捕获所有未处理异常并实现安全脱敏;JAX-RS的ExceptionMapper更适合RESTful项目,具有规范优雅的优势。文章强调了异常处理的安全原则(禁止堆栈外泄)、监控闭环和性能验证,并提供了代码示例和方案对比指南。通过合理选择异常处理方案,可显著提升系统稳定性,改善开发协作效率。
2026-02-02 21:37:46
685
原创 Listener加载顺序暗坑:我的初始化代码“人间蒸发”,测试妹子第5次站我工位前…
摘要:本文记录了作者在Tomcat9.0.85环境下排查"系统配置缺失"问题的全过程。问题表现为预发环境间歇性出现NullPointerException,而本地运行正常。通过日志埋点、Arthas监控和Tomcat源码分析,发现根本原因是ServletContextListener执行顺序问题:Tomcat按web.xml声明顺序逆序执行Listener,导致后执行的Spring ContextLoaderListener清除了先执行的SystemConfigLoader设置的属性。最
2026-02-01 23:22:06
786
原创 Filter链顺序翻车实录:一个中文乱码问题,让我在测试部门口站了两小时
摘要: 开发者在处理用户昵称中文乱码问题时,通过Arthas工具发现Filter执行顺序与web.xml配置相反,导致编码Filter未及时生效。根因是Tomcat按filter-mapping声明顺序倒序执行Filter链,而自定义LogFilter提前解析参数引发乱码。解决方案包括:1)调整web.xml顺序使编码Filter最先执行;2)重构LogFilter避免提前解析参数;3)SpringBoot项目使用@Order注解。文章强调Filter顺序的重要性,并提供了排查乱码的实用技巧和上线检查清单。
2026-01-31 22:27:42
819
原创 缓存设计踩坑实录:一个HashMap引发的线上Full GC血案
《深夜救火:从FullGC告警到缓存优化实战》摘要 周五深夜生产环境告警:FullGC频率飙升至8次/分钟,P99延迟突破15秒。通过GC日志和MAT分析发现静态HashMap缓存导致287万+对象堆积(2.1GB内存)。问题根源:动态生成唯一Key、无容量限制、静态持有。采用GuavaCache重构,设置容量上限(10,000)、过期策略(10分钟)和加载机制,解决内存泄漏问题。经验总结:避免裸奔HashMap,选择专业缓存工具;Key需有复用性;必须设置过期策略;上线前需压测和内存监控。技术成长往往源于
2026-01-30 22:23:40
817
原创 别再让ThreadLocal背锅了!一个码农深夜改Bug的血泪实录
深夜线上事故实录:用户下单竟显示他人收货地址!根源竟是ThreadLocal在线程池中未清理。文章直击三大痛点:线程复用残留数据、异步场景传值失效、清理时机踩坑。作者亲授三重防护:① 拦截器afterCompletion兜底清理(避坑:异常时仍触发)② 工具类safeSet+finally强制清理(团队规范落地)③ 异步场景切换TransmittableThreadLocal(附Maven坐标)附排查截图、口诀总结(“设值必清理,异步换TTL,线程池是照妖镜”)及灵魂反思:你真的需要Thread
2026-01-29 23:36:20
617
原创 数据库连接池崩了?别再瞎调maxPoolSize!HikariCP和Druid的5个致命坑,第4个让我背了锅
摘要: 本文基于真实生产事故,总结了数据库连接池配置的五大常见陷阱及解决方案。核心问题包括:maxPoolSize设置不当导致数据库连接耗尽、connectionTimeout过长影响用户体验、连接泄漏引发系统崩溃、idleTimeout与maxLifetime配置矛盾降低复用率,以及监控缺失导致故障滞后。针对每个问题,作者提供了计算公式(如maxPoolSize=(数据库最大连接数-保留连接)÷实例数×0.8)、黄金参数建议(如HikariCP的leak-detection-threshold必设)和监控
2026-01-28 21:15:08
1355
原创 别再被文件上传坑了!Spring Boot文件上传的5个血泪坑,第3个90%的人栽过
本文分享了SpringBoot文件上传功能的5个常见坑点及解决方案:1)配置项版本差异导致失效,2)后端校验缺失导致安全风险,3)中文文件名乱码问题,4)Linux服务器权限问题,5)大文件上传超时。作者结合生产事故案例,提供了详细的代码示例和配置建议,包括文件类型白名单校验、安全文件名处理、Nginx超时设置等关键实现。文章强调后端校验是安全底线,并附赠获取客户端IP和安全文件名校验等工具类代码。这些实战经验可帮助开发者构建更稳定的文件上传功能。
2026-01-28 21:02:04
930
原创 Spring Boot 项目中,如何处理“用户重复提交”?
本文分享了基于SpringBoot的轻量级防重复提交方案。通过"请求指纹+短期缓存"替代传统分布式锁,使用用户ID+接口路径+请求ID作为Redis键,设置5秒过期时间。相比synchronized和Redis锁,该方案更精准、低开销且支持集群部署。实现步骤包括:前端生成请求ID、自定义注解标记接口、拦截器实现核心逻辑,并提供了避坑指南。该方案已在生产环境稳定运行半年,能有效防止99%的误操作重复提交。
2026-01-27 23:34:23
752
原创 Spring Boot 项目中,如何正确处理 MySQL 的“唯一索引冲突”?别再用 try-catch 硬扛了!
本文分享了SpringBoot+MySQL开发中处理唯一索引冲突的解决方案。作者通过实际案例指出常见错误做法(如笼统捕获异常、先查后插校验),并给出正确处理方法:精准捕获DuplicateKeyException,解析冲突字段返回友好提示,配合全局异常处理器返回标准格式。文章还提供了避坑指南,强调唯一索引是数据一致性的重要保障,建议显式命名索引并合理处理异常。最后总结不同做法的优缺点,帮助开发者实现更健壮的并发控制。
2026-01-27 00:17:50
544
原创 Spring Boot + EasyExcel 实战:别再用 Apache POI 手写 Excel 了!内存溢出、样式错乱一次解决
本文分享了使用阿里巴巴EasyExcel替代原生Apache POI处理Excel导入导出的优化方案。针对传统POI导致内存溢出(OOM)的问题,EasyExcel通过SAX模式逐行解析,将2万行Excel的内存占用从1.2G降至30M。文章详细介绍了实现步骤:1)引入依赖;2)使用注解定义数据模型;3)编写带校验的导入逻辑和监听器;4)简单3行代码实现导出功能。同时总结了处理.xls格式、中文乱码、日期转换等常见问题的解决方案,最终实现高效稳定、用户体验良好的Excel处理功能。
2026-01-26 21:09:30
604
原创 Spring Boot 全局异常处理实战:别再让前端看到 500 错误了!
本文介绍了如何使用SpringBoot的@ControllerAdvice实现全局异常处理机制。作者通过真实项目案例,指出传统try-catch方式的不足,提出了统一异常处理方案。文章详细讲解了三个实现步骤:定义统一返回格式Result类、创建GlobalExceptionHandler全局处理器、简化Controller代码。该方案能分层处理不同异常类型,提供友好错误提示,同时避免代码重复。最后还解答了常见问题,强调良好的异常处理应兼顾用户体验、开发维护和代码整洁性。
2026-01-26 19:55:32
513
原创 Spring Boot 读取自定义配置参数的正确姿势(别再用 @Value 乱写了!)
摘要: 本文介绍了SpringBoot中更优雅的配置管理方式,对比了常见的@Value注解的缺点(难维护、无校验、易出错),推荐使用@ConfigurationProperties将配置绑定到Java对象。通过示例演示了如何创建配置类、添加校验注解,并注入使用。该方法支持嵌套对象、类型安全及启动时校验,适用于数据库或第三方服务等复杂配置场景,而@Value仅适合简单临时参数。最后解答了常见问题,并对比了两种方式的优缺点。
2026-01-25 14:38:56
459
原创 MyBatis Plus 分页插件不生效?别再手写 limit 了!一行配置搞定分页(附避坑指南)
本文针对MyBatisPlus分页功能常见问题,详细讲解3步实现专业分页的方法。首先强调必须注册分页插件(最易遗漏的关键步骤),并提供新版配置示例;其次演示Controller调用和前端对接的正确方式;最后列举分页不生效的三大原因及解决方案,包括未注册插件、多数据源问题和SQL改写情况。文章还给出性能优化建议,如添加索引、避免深度分页等。通过完整的分页实现流程和常见问题排查指南,帮助开发者高效使用MyBatisPlus分页功能,避免手动编写低效的分页代码。
2026-01-25 12:58:18
581
基金实时监控小助手(快速上手)
2026-02-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅