SpringBoot网关服务启动失败,排查发现Nacos网络连接正常。根因有二:启动脚本JDK路径错误且日志监控逻辑有缺陷;自定义组件springboot.toolbox在容器生命周期监听中调用getBean,触发框架异常。修复方案包括修正脚本配置、避免在销毁阶段获取Bean。
本次故障表现为:网关服务 gateway-server 在 Linux 宿主机上通过脚本或手动执行初始化时无法正常启动。具体现象包括启动过程卡死、日志追踪异常、JDK 路径不匹配,甚至出现提示启动成功后随即抛出异常崩溃的情况。
涉及的组件包括:gateway-server(基于 Spring Boot 2.7.16 / Spring Cloud)、Nacos v2.2.3(Docker 部署)、自定义工具包 springboot.toolbox 以及一套 Shell 启动脚本。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
排查结论:Nacos 的网络、端口映射和底层连接均正常,HTTP 端口 28096 和 gRPC 端口 29096 全链路通畅。实际病根由两个维度的问题叠加造成:
初步怀疑 Docker 容器网络隔离导致宿主机无法访问 Nacos。在宿主机上分别对 127.0.0.1、私网 IP(172.31.39.235)以及公网 IP 的 28096(HTTP)和 29096(gRPC)执行 curl 和 nc 连通性测试。结果均返回 HTTP 200,TCP 握手成功。
[root@ip-172-31-39-235 gateway-server]# curl -I http://172.31.39.235:28096/nacos/
HTTP/1.1 200 OK
结论:底层网络、Docker 端口映射、防火墙/安全组配置均无异常。
直接运行 ja va -jar gateway-server.jar 查看详细启动日志。日志显示:
2026-07-21 01:42:31.646 | INFO ... Try to connect to server on start up, server: {serverIp = '127.0.0.1', server main port = 28096}
2026-07-21 01:42:31.646 | INFO ... Success to connect to server [127.0.0.1:28096] on start up, connectionId = 1784598151416_172.19.0.1_47722
Spring Boot 客户端成功与 Nacos 服务端建立 gRPC 长连接,配置加载和服务注册均已完成。因此 Nacos 连接本身完全正常,排除 Nacos 故障。
使用脚本启动时,服务无法拉起或日志检测失效。检查发现两个问题:
# 脚本中被注释的日志检查与状态判定逻辑
# timeout 5m tail -f $filename | sed -e '/Application had been ready since/q 1'
最异常的情况是,服务已提示 Started GatewayServerApplication 准备就绪,随后又抛出 Application run failed,并报出容器生命周期异常。核心错误日志如下:
org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'internalAsyncEventBus': Singleton bean creation not allowed while singletons of this factory are in destruction
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.ja va:220)
at com.github.ja vaclub.toolbox.spring.BeanFactory.getBean(BeanFactory.ja va:41)
at springboot.toolbox.SpringBootAutoConfiguration.onApplicationEvent(SpringBootAutoConfiguration.ja va:161)
元凶锁定:项目引入的自定义 Starter 组件 springboot.toolbox 中的 SpringBootAutoConfiguration 配置类,在监听应用就绪/关闭生命周期事件时(onApplicationEvent 第 161 行),通过编码调用 BeanFactory.getBean(...) 获取单例 Bean。此时 Spring 容器正处于销毁交接边界,触发了框架的防并发保护机制,导致主线程异常退出。
关键修复点:检查并修改自定义组件库(或项目内部引入的 springboot.toolbox)中的 SpringBootAutoConfiguration.ja va。具体措施:
在宿主机本地调试时,Nacos 连接串建议统一使用 127.0.0.1:28096(走标准回环网卡),避免因 Linux 内核路由策略导致使用私网 IP 自连接时产生间歇性卡顿。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述