SpringBoot+Nacos+MySQL微服務(wù)問題及解決方案
場景設(shè)定
你有一個(gè) Java 微服務(wù)應(yīng)用(如 your-pro.jar),部署在 Linux 服務(wù)器上,使用:
- Nacos 作為配置中心和注冊中心
- MySQL 作為數(shù)據(jù)庫
- Spring Boot 框架
- 日志文件位于
/home/project-cloud/server/your-pro/module/logs/
你發(fā)現(xiàn)應(yīng)用啟動(dòng)失敗或無法訪問,需要快速排查。
定制排查命令模板:Spring Boot + Nacos + MySQL
建議按順序執(zhí)行,每一步都可能定位到問題。
第一步:查看應(yīng)用日志(定位錯(cuò)誤根源)
# 進(jìn)入日志目錄 cd /home/project-cloud/server/your-pro/module/logs/ # 實(shí)時(shí)查看日志,并高亮 ERROR 和 WARN tail -f *.log | grep --color=always -E "ERROR|WARN|Exception"
關(guān)注關(guān)鍵詞:
Failed to startDataSourceConnection refusedTimeoutClassNotFoundExceptionNoSuchBeanDefinitionException
第二步:確認(rèn)應(yīng)用是否在運(yùn)行
# 查看 Java 進(jìn)程 ps aux | grep java | grep -v grep # 或精確查找你的服務(wù) ps aux | grep your-pro
正常輸出示例:
root 1234 1.2 5.3 2345678 123456 ? Sl 10:00 0:15 java -jar your-pro.jar
如果沒有輸出,說明服務(wù)未啟動(dòng)或已崩潰。
第三步:檢查端口是否監(jiān)聽
# 檢查你的服務(wù)端口(如 9202) ss -tulnp | grep :9202 # 檢查 Nacos 端口 ss -tulnp | grep :8848 ss -tulnp | grep :9848 # 檢查 MySQL 端口 ss -tulnp | grep :3306
正常:顯示 LISTEN 狀態(tài)和 java 或 mysqld 進(jìn)程
異常:無輸出 → 服務(wù)未啟動(dòng)或端口配置錯(cuò)誤
第四步:測試網(wǎng)絡(luò)連通性
# 測試 Nacos 是否可達(dá)(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
# 測試本機(jī)服務(wù)是否響應(yīng)
curl http://localhost:9202/actuator/health
如果 telnet 失敗,可能是:
- 防火墻阻止
- 安全組未開放(云服務(wù)器)
- 服務(wù)未監(jiān)聽
第五步:檢查配置文件
# 查找 bootstrap.yml 或 application.yml find /home/project-cloud -name "bootstrap*.yml" -o -name "application*.yml" 2>/dev/null # 查看配置內(nèi)容(重點(diǎn)關(guān)注數(shù)據(jù)庫和 Nacos) cat /home/project-cloud/server/your-pro/module/config/bootstrap.yml # 檢查是否配置了數(shù)據(jù)庫 grep -A 5 -B 2 "datasource" bootstrap.yml
確認(rèn)配置中是否有:
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" # 如果有權(quán)限,可加用戶名密碼 curl -u nacos:nacos "http://10.135.10.33:8848/nacos/v1/cs/configs?dataId=your-pro-test.yml&group=DEFAULT_GROUP"
應(yīng)返回你在 Nacos 控制臺(tái)配置的 yaml 內(nèi)容,包含數(shù)據(jù)庫配置。
第七步:檢查數(shù)據(jù)庫連接
# 登錄 MySQL mysql -h 127.0.0.1 -u root -p # 檢查數(shù)據(jù)庫是否存在 SHOW DATABASES LIKE 'your_pro'; # 檢查表(如果是代碼生成器) USE your_pro; SHOW TABLES;
如果連接失敗,檢查:
- MySQL 是否啟動(dòng)
- 用戶權(quán)限
bind-address是否限制了 IP
第八步:檢查系統(tǒng)資源
# 查看 CPU 和內(nèi)存 top -b -n 1 | head -20 # 查看磁盤空間 df -h / /home # 查看日志目錄占用 du -sh /home/project-cloud/server/*/logs/*.log
避免因磁盤滿導(dǎo)致日志寫入失敗或應(yīng)用崩潰。
第九步:檢查服務(wù)啟動(dòng)命令
# 查看你是如何啟動(dòng)的 ps aux | grep java | grep jar # 正確示例: # java -jar your-pro.jar --spring.profiles.active=test
確保:
- 使用了正確的
--spring.profiles.active - 沒有遺漏 JVM 參數(shù)(如
-Dnacos.server.addr=...)
第十步:一鍵打包診斷信息(可選)
創(chuàng)建一個(gè)診斷腳本 diagnose.sh:
#!/bin/bash echo "=== 診斷時(shí)間: $(date) ===" echo echo "【1. Java 進(jìn)程】" ps aux | grep java | grep -v grep echo echo "【2. 端口監(jiān)聽】" 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"
運(yùn)行:
chmod +x diagnose.sh ./diagnose.sh > diagnose.log
把 diagnose.log 發(fā)給同事或發(fā)到群里,快速定位問題。
總結(jié):排查流程圖
啟動(dòng)失??? ↓ → 查日志(tail -f) ↓ → 看進(jìn)程(ps aux) ↓ → 查端口(ss -tulnp) ↓ → 測試連通(telnet/curl) ↓ → 檢查配置(bootstrap.yml + Nacos) ↓ → 驗(yàn)證數(shù)據(jù)庫 ↓ → 檢查資源(CPU/內(nèi)存/磁盤) ↓ → 修復(fù)并重啟
建議:把這個(gè)模板保存為 troubleshoot.md 放在項(xiàng)目根目錄,團(tuán)隊(duì)共享。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)的具有GUI的校園導(dǎo)航系統(tǒng)的完整代碼
這篇文章主要介紹了Java實(shí)現(xiàn)的具有GUI的校園導(dǎo)航系統(tǒng)的完整代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
Java并發(fā)編程:volatile關(guān)鍵字詳細(xì)解析
這篇文章主要介紹了Java并發(fā)編程:volatile關(guān)鍵字詳細(xì)解析,對(duì)學(xué)習(xí)volatile關(guān)鍵字有一定的認(rèn)識(shí),有需要的可以了解一下。2016-11-11
idea創(chuàng)建的idea項(xiàng)目時(shí)springframework出現(xiàn)紅色的原因和解決方法
當(dāng)使用 IntelliJ IDEA 創(chuàng)建 Spring Framework 項(xiàng)目時(shí),springframework 出現(xiàn)紅色可能是因?yàn)橄嚓P(guān)的 Spring Framework 依賴沒有正確加載或項(xiàng)目的配置有問題,本文給大家介紹了一些常見的原因和解決方法,需要的朋友可以參考下2023-09-09
Java基于fork/koin類實(shí)現(xiàn)并發(fā)排序
這篇文章主要介紹了Java基于fork/koin類實(shí)現(xiàn)并發(fā)排序,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
詳解Struts2動(dòng)態(tài)方法調(diào)用
這篇文章主要介紹了詳解Struts2動(dòng)態(tài)方法調(diào)用,涉及調(diào)用方法的代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-09-09
Springboot整合mybatisplus的項(xiàng)目實(shí)戰(zhàn)
本文主要介紹了Springboot整合mybatisplus的項(xiàng)目實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
Spring?Cloud?中自定義外部化擴(kuò)展機(jī)制原理及實(shí)戰(zhàn)記錄
這篇文章主要介紹了Spring?Cloud?中自定義外部化擴(kuò)展機(jī)制原理及實(shí)戰(zhàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Java8如何優(yōu)雅的記錄代碼運(yùn)行時(shí)間
這篇文章主要為大家詳細(xì)介紹了 Java 8 中幾種記錄代碼運(yùn)行時(shí)間的優(yōu)雅方式,并附上實(shí)用工具類與建議,希望可以幫助大家提高大家的代碼可讀性與復(fù)用性2025-04-04

