项目已经启动,却出现接口报错、连接超时、SQL 异常或线程卡住时,从这里按现象查找本站的排查文章。每个入口对应一篇已经发布的具体问题说明,命令与配置的适用环境写在各篇正文中。
最近整理:2026-10-29。先保存错误时间、完整异常链、请求路径与运行环境,再逐步缩小范围;涉及修改的操作,按文章前提在合适环境复测。
按现象找到入口
| 现在看到的现象 | 先看这篇 |
|---|---|
| 路径看起来没错,接口却是 404 | Spring Boot 接口 404 |
| 地址正确,HTTP 方法不被允许 | 接口返回 405 |
| JSON、表单或文件上传格式不匹配 | 接口返回 415 |
| 经过 Nginx 后出现 502 / 504 | 区分代理与 Spring Boot 故障 |
| 数据库连接长时间等不到 | 数据库连接池耗尽 |
| Java 进程还在,但请求一直卡住 | Java 线程死锁定位 |
| 健康检查 DOWN,实例被摘流或重启 | 健康检查 DOWN |
接口请求、参数与上传
先确认响应由哪个环节产生,再比较请求方法、路径、媒体类型和请求体。不同状态码只是入口线索,项目自定义异常处理与网关行为也要一并核对。
- 接口明明写了却返回 404:路径、上下文与映射检查。
- 接口返回 405:HTTP 方法、Allow 与代理路径。
- 接口返回 415:Content-Type、consumes 与消息转换器。
- 跨域预检请求 403:先看 OPTIONS 与实际请求的差别。
- 上传 413 与 MultipartFile 为空:大小限制、参数名和上传格式。
- 参数校验不生效:依赖、注解与校验触发位置。
刚开始写接口,可先读 Spring Boot 接收 JSON 参数,再按上面的具体错误继续排查。
数据库、事务与 MyBatis
先分清问题发生在参数绑定、连接获取、SQL 执行还是结果映射,避免把所有数据库异常都当成“SQL 写错”。
| 文章 | 重点线索 |
|---|---|
| 数据库连接池耗尽 | 连接等待、占用时间与连接池状态 |
| MySQL 死锁 | 事务持锁与等待顺序、整体事务重试 |
| Transactional 不回滚 | 调用路径、异常类型与事务边界 |
| MyBatis Invalid bound statement | XML 加载、namespace、方法绑定 |
| 查询有数据,实体字段却为 null | 列名、属性名与结果映射 |
| foreach 查询报错 | 参数名称、空集合与实际 SQL |
数据库死锁和 Java 线程死锁涉及不同资源,要分别取得数据库锁信息与 JVM 线程信息;不能用一份线程转储代替两边的证据。
Redis、HTTP 与 HTTPS 调用
- Redis 连接超时:区分建连、命令执行和客户端等待。
- Java 调用 HTTP 接口超时:核对连接、请求与整体调用等待。
- Java HTTPS 证书校验失败:核对运行时、证书链、信任库和主机名。
复测使用原来的运行环境、域名和调用端配置。另一个客户端请求成功,可以帮助对照,但不能直接证明原调用链已经恢复。
运行、日志与部署入口
- 日志文件没生成:配置、路径、权限与实际日志实现。
- 健康检查 DOWN:组件结果、健康分组与探针访问路径。
- Nginx / Spring Boot 502、504:应用直连、代理与上游等待的对照。
- Java 线程死锁:多份线程转储、锁关系与任务等待。
- 定时任务不执行或重复执行:扫描、调度、多实例和执行状态。
- Java 时间差八小时:时间类型、默认时区与序列化链路。
启动阶段的问题
如果项目还没启动成功,先回到这些入口:
需要完整项目开发顺序时,继续阅读 Spring Boot 教程。本专题随已发布文章补充入口,阅读时先核对各篇的更新时间和环境说明。
更新记录
- 2026-10-29:建立专题,按接口、数据访问、外部调用和运行故障整理已发布文章;补齐与开发环境、Spring Boot 教程的交叉导航。
Java 后端排障专题
https://java.li/java-backend-troubleshooting
评论