SpringBoot+Nacos+MySQL微服务问题及解决方案

 更新时间:2025年09月15日 09:15:52   作者:刘一说  
Java微服务启动失败排查流程:检查日志、服务状态、端口监听、网络连通、配置与Nacos同步、数据库连接、系统资源及启动参数,必要时打包诊断信息并共享文档

场景设定

你有一个 Java 微服务应用(如 your-pro.jar),部署在 Linux 服务器上,使用:

  • Nacos 作为配置中心和注册中心
  • MySQL 作为数据库
  • Spring Boot 框架
  • 日志文件位于 /home/project-cloud/server/your-pro/module/logs/

你发现应用启动失败或无法访问,需要快速排查。

定制排查命令模板:Spring Boot + Nacos + MySQL

建议按顺序执行,每一步都可能定位到问题。

第一步:查看应用日志(定位错误根源)

# 进入日志目录
cd /home/project-cloud/server/your-pro/module/logs/

# 实时查看日志,并高亮 ERROR 和 WARN
tail -f *.log | grep --color=always -E "ERROR|WARN|Exception"

关注关键词

  • Failed to start
  • DataSource
  • Connection refused
  • Timeout
  • ClassNotFoundException
  • NoSuchBeanDefinitionException

第二步:确认应用是否在运行

# 查看 Java 进程
ps aux | grep java | grep -v grep

# 或精确查找你的服务
ps aux | grep your-pro

正常输出示例:

root  1234  1.2  5.3  2345678  123456  ?  Sl   10:00  0:15 java -jar your-pro.jar

如果没有输出,说明服务未启动或已崩溃

第三步:检查端口是否监听

# 检查你的服务端口(如 9202)
ss -tulnp | grep :9202

# 检查 Nacos 端口
ss -tulnp | grep :8848
ss -tulnp | grep :9848

# 检查 MySQL 端口
ss -tulnp | grep :3306

正常:显示 LISTEN 状态和 javamysqld 进程

异常:无输出 → 服务未启动或端口配置错误

第四步:测试网络连通性

# 测试 Nacos 是否可达(HTTP)
curl -s -w "%{http_code}\n" -o /dev/null http://10.135.10.33:8848/nacos/v1/console/health

# 测试 Nacos gRPC 端口
telnet 10.135.10.33 9848

# 测试 MySQL 连通性
telnet 127.0.0.1 3306

# 测试本机服务是否响应
curl http://localhost:9202/actuator/health

如果 telnet 失败,可能是:

  • 防火墙阻止
  • 安全组未开放(云服务器)
  • 服务未监听

第五步:检查配置文件

# 查找 bootstrap.yml 或 application.yml
find /home/project-cloud -name "bootstrap*.yml" -o -name "application*.yml" 2>/dev/null

# 查看配置内容(重点关注数据库和 Nacos)
cat /home/project-cloud/server/your-pro/module/config/bootstrap.yml

# 检查是否配置了数据库
grep -A 5 -B 2 "datasource" bootstrap.yml

确认配置中是否有:

spring:
  datasource:
    url: jdbc:mysql://...
    username: ...
    password: ...
  cloud:
    nacos:
      discovery:
        server-addr: 10.135.10.33:8848
      config:
        server-addr: 10.135.10.33:8848

第六步:检查 Nacos 配置是否存在

# 使用 curl 查看 Nacos 配置(替换 dataId 和 group)
curl "http://10.135.10.33:8848/nacos/v1/cs/configs?dataId=your-pro-test.yml&group=DEFAULT_GROUP"

# 如果有权限,可加用户名密码
curl -u nacos:nacos "http://10.135.10.33:8848/nacos/v1/cs/configs?dataId=your-pro-test.yml&group=DEFAULT_GROUP"

应返回你在 Nacos 控制台配置的 yaml 内容,包含数据库配置。

第七步:检查数据库连接

# 登录 MySQL
mysql -h 127.0.0.1 -u root -p

# 检查数据库是否存在
SHOW DATABASES LIKE 'your_pro';

# 检查表(如果是代码生成器)
USE your_pro;
SHOW TABLES;

如果连接失败,检查:

  • MySQL 是否启动
  • 用户权限
  • bind-address 是否限制了 IP

第八步:检查系统资源

# 查看 CPU 和内存
top -b -n 1 | head -20

# 查看磁盘空间
df -h / /home

# 查看日志目录占用
du -sh /home/project-cloud/server/*/logs/*.log

避免因磁盘满导致日志写入失败或应用崩溃。

第九步:检查服务启动命令

# 查看你是如何启动的
ps aux | grep java | grep jar

# 正确示例:
# java -jar your-pro.jar --spring.profiles.active=test

确保:

  • 使用了正确的 --spring.profiles.active
  • 没有遗漏 JVM 参数(如 -Dnacos.server.addr=...

第十步:一键打包诊断信息(可选)

创建一个诊断脚本 diagnose.sh

#!/bin/bash
echo "=== 诊断时间: $(date) ==="
echo
echo "【1. Java 进程】"
ps aux | grep java | grep -v grep
echo
echo "【2. 端口监听】"
ss -tulnp | grep -E ":(8848|9848|9202|3306)"
echo
echo "【3. Nacos 健康】"
curl -s http://10.135.10.33:8848/nacos/v1/console/health
echo
echo "【4. 磁盘空间】"
df -h /
echo
echo "【5. 最近日志】"
tail -n 20 /home/peoject-cloud/server/your-pro/module/logs/*.log | grep -E "ERROR|WARN"

运行:

chmod +x diagnose.sh
./diagnose.sh > diagnose.log

diagnose.log 发给同事或发到群里,快速定位问题。

总结:排查流程图

启动失败?
   ↓
→ 查日志(tail -f)
   ↓
→ 看进程(ps aux)
   ↓
→ 查端口(ss -tulnp)
   ↓
→ 测试连通(telnet/curl)
   ↓
→ 检查配置(bootstrap.yml + Nacos)
   ↓
→ 验证数据库
   ↓
→ 检查资源(CPU/内存/磁盘)
   ↓
→ 修复并重启

建议:把这个模板保存为 troubleshoot.md 放在项目根目录,团队共享。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java 判断IP地址的合法性实例详解

    Java 判断IP地址的合法性实例详解

    这篇文章主要介绍了Java 判断IP地址的合法性实例详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • java 使用readLine() 乱码的解决

    java 使用readLine() 乱码的解决

    这篇文章主要介绍了java使用readLine()乱码的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • SpringBoot使用Cache集成Redis做缓存的保姆级教程

    SpringBoot使用Cache集成Redis做缓存的保姆级教程

    Spring Cache是Spring框架提供的一个缓存抽象层,它简化了缓存的使用和管理,Spring Cache默认使用服务器内存,并无法控制缓存时长,查找缓存中的数据比较麻烦,本文已常用的Redis作为缓存中间件作为示例,详细讲解项目中如何使用Cache提高系统性能,需要的朋友可以参考下
    2025-01-01
  • Java8 Comparator排序方法实例详解

    Java8 Comparator排序方法实例详解

    这篇文章主要介绍了Java8 Comparator排序方法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 2020年编程选Java的8大理由,JAVA前景如何

    2020年编程选Java的8大理由,JAVA前景如何

    这篇文章主要介绍了2020年编程选Java的8大理由,JAVA前景如何,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • 基于Java NIO编写一个简单版Netty服务端

    基于Java NIO编写一个简单版Netty服务端

    基于 NIO 实现的网络框架,可以用少量的线程,处理大量的连接,更适用于高并发场景,所以被就将利用NIO编写一个简单版Netty服务端,需要的可以参考下
    2024-04-04
  • Java特性 Lambda 表达式和函数式接口

    Java特性 Lambda 表达式和函数式接口

    这篇文章主要介绍了Java特性 Lambda 表达式和函数式接口,Lambda表达式基于函数式编程思想,也可以称为闭包,是Java 8引入的重要新特性, Lambda允许把函数作为一个方法的参数
    2022-06-06
  • 详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理

    详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理

    这篇文章主要介绍了详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Spring应用抛出NoUniqueBeanDefinitionException异常的解决方案

    Spring应用抛出NoUniqueBeanDefinitionException异常的解决方案

    这篇文章介绍了解决org.springframework.beans.factory.NoUniqueBeanDefinitionException异常的一些解决方案,从这些解决方案可以看出Spring框架的设计精妙,遇见此问题的朋友可以参考下该解决方案
    2021-06-06
  • MyBatisPlus 大数据量查询慢的问题解决

    MyBatisPlus 大数据量查询慢的问题解决

    本文主要介绍了MyBatis Plus 解决大数据量查询慢问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02

最新评论