一、问题描述
在做的一个SpringBoot 项目,前端页面访问不到后端的数据。最后排查出来是因为Docker 中的 MySQL
容器的主机端口号写成了 :3307,导致项目配置文件中的JDBC
路径如
jdbcUrl: jdbc:mysql://127.0.0.1:3306/database_name?query=true&foo=bar
对不上容器暴露出来的主机端口号。
IDE 的数据库插件能通过:3307
访问到数据库,而我一直误以为后端服务也已经访问了,可谓是一个低级错误。但是排查的思路应当记录下来。
二、排查思路
从项目的整体架构入手,分别排查每一个组成部分。
本项目的结构为
(一)排查前端
- 首先怀疑工具链版本问题。
Node
、npm
、Yarn
降级后发现前端项目 build 后无变化,BUG 仍然不变。 - 怀疑
node_modules/
异常,重新下载依赖、或直接移植文件夹无效。
(二)排查网关及后端服务
- 检查
Nacos
控制台,发现这两个服务健康,且控制台日志无异常。 - 怀疑后端项目的运行端口号有问题,检查了
application.yml
中的server.port
,均互相吻合。
(三)排查数据库
- 检查
Docker Desktop
,mysql 容器运行正常,且IDE 的数据库插件能正常访问、查询控制台能正确返回数据。 - 与前端页面交互,发现后端服务运行终端有报错反应,说明
前端→网关→后端
是打通的。经过检查发现是数据库异常。
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@270d76cc] was not registered for synchronization because synchronization is not active
说明后端→数据库
未打通,排查发现端口有误区。