SpringBoot 排错思路记录

49 阅读1分钟

一、问题描述

在做的一个SpringBoot 项目,前端页面访问不到后端的数据。最后排查出来是因为Docker 中的 MySQL 容器的主机端口号写成了 :3307,导致项目配置文件中的JDBC路径如

jdbcUrl: jdbc:mysql://127.0.0.1:3306/database_name?query=true&foo=bar

对不上容器暴露出来的主机端口号。

IDE 的数据库插件能通过:3307 访问到数据库,而我一直误以为后端服务也已经访问了,可谓是一个低级错误。但是排查的思路应当记录下来。

二、排查思路

从项目的整体架构入手,分别排查每一个组成部分。

本项目的结构为

架构.png

(一)排查前端

  1. 首先怀疑工具链版本问题。NodenpmYarn降级后发现前端项目 build 后无变化,BUG 仍然不变。
  2. 怀疑node_modules/ 异常,重新下载依赖、或直接移植文件夹无效。

(二)排查网关及后端服务

  1. 检查Nacos控制台,发现这两个服务健康,且控制台日志无异常。
  2. 怀疑后端项目的运行端口号有问题,检查了application.yml 中的server.port,均互相吻合。

(三)排查数据库

  1. 检查Docker Desktop,mysql 容器运行正常,且IDE 的数据库插件能正常访问、查询控制台能正确返回数据。
  2. 与前端页面交互,发现后端服务运行终端有报错反应,说明前端→网关→后端是打通的。经过检查发现是数据库异常。
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@270d76cc] was not registered for synchronization because synchronization is not active

说明后端→数据库未打通,排查发现端口有误区。