当前位置: 代码网 > it编程>编程语言>Java > SpringBoot连接Nacos异常及启动失败的故障排查与解决方案

SpringBoot连接Nacos异常及启动失败的故障排查与解决方案

2026年07月22日 Java 我要评论
故障概述故障现象:gateway-server 网关服务在宿主机(linux)上通过脚本或手动运行初始化时,出现无法正常完成启动、日志追踪异常、jdk 路径不匹配以及在生命周期末期抛出异常崩溃的现象。

故障概述

  • 故障现象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)上均正常。真正的故障根源表现为多维度的综合问题:
    • 环境与脚本配置缺陷:jdk 启动路径配置错误(指向了不存在的路径),且 shell 启动脚本中的 start 动作及 taillog 日志监控函数存在逻辑错误并已被临时注释(comment out)。
    • 框架生命周期缺陷:服务在容器就绪交接阶段,因自定义组件生命周期监听逻辑不当引发 spring 内部容器异常崩溃。

排查与定位过程

1. 网络层与端口映射排查

  • 现象:早期怀疑是 docker 容器网络隔离导致宿主机访问失败。
  • 测试与验证
    • 在宿主机分别对 127.0.0.1、私网 ip(172.31.39.235)及公网 ip 的 28096(http)和 29096(grpc)进行 curlnc 连通性测试,结果全部返回 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 端口映射及防火墙/安全组配置均无异常。

2. nacos 客户端连通性验证

  • 现象:通过直接运行 java -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 故障。

3. 启动脚本与运行环境缺陷排查

  • 现象:通过脚本管理时无法正确拉起服务或检测日志。
  • 排查发现
    • jdk 路径错误:脚本中配置了服务器上实际不存在的 jdk 路径,导致通过脚本启动时直接因找不到 java 运行环境而失败。
    • 启动动作与日志追踪缺陷:脚本的 start 动作逻辑存在缺陷,且用于监听启动状态的 taillog() 函数因超时或逻辑匹配问题已被注释处理:
# 脚本中被注释的日志检查与状态判定逻辑
# timeout 5m tail -f $filename | sed -e '/application had been ready since/q 1'

4. 最终崩溃堆栈与元凶锁定

  • 现象:服务在提示 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.java:220)
        at com.github.javaclub.toolbox.spring.beanfactory.getbean(beanfactory.java:41)
        at springboot.toolbox.springbootautoconfiguration.onapplicationevent(springbootautoconfiguration.java:161)
  • 故障定位
    • 引发崩溃的是项目引入的自定义 starter 组件 springboot.toolbox 中的 springbootautoconfiguration
    • 该配置类在监听应用就绪/关闭生命周期事件时(onapplicationevent 第 161 行),强行通过编码调用 beanfactory.getbean(...) 获取单例 bean。
    • 此时 spring 容器正处于销毁交接边界,触发了 spring 框架的防并发保护机制,直接导致主线程异常退出。

解决方案与整改建议

1. 修复应用层崩溃(核心修复)

  • 修改目标:检查并修改自定义组件库(或项目内部引入的 springboot.toolbox)中的 springbootautoconfiguration.java
  • 整改措施
    • 避免在 applicationreadyevent 或生命周期销毁监听器中直接动态调用 beanfactory.getbean() 获取非懒加载单例。
    • 若必须获取 bean,应改为在容器初始化阶段通过依赖注入(@autowired)完成,或者判断当前容器状态是否处于活动中(context.isactive()),防止在销毁阶段强制索取 bean。

2. 修复启动脚本与环境配置

  • jdk 路径修正:检查并更新服务启动脚本中的 java_homejava 命令路径,确保其指向宿主机上实际存在的可用 jdk(例如 /usr/lib/jvm/java-1.8.0-openjdk-...)。
  • 重构启动与日志检查脚本:修复并优化 start 动作及被注释的 taillog() 函数,确保能够正确配合 application.log 的输出内容判定服务是否启动成功,避免因脚本逻辑死板导致误判。

3. 本地开发与调试最佳实践

  • 连接地址规范:在宿主机本地调试时,nacos 连接串建议统一规范使用 127.0.0.1:28096(走标准回环网卡),避免因 linux 内核路由策略导致使用私网 ip 自连接时产生间歇性卡顿。

以上就是springboot连接nacos异常及启动失败的故障排查与解决方案的详细内容,更多关于springboot连接nacos异常及启动失败的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com