SpringBoot+Nacos+MySQL微服務(wù)問題及解決方案
場景設(shè)定
你有一個 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)用啟動失敗或無法訪問,需要快速排查。
定制排查命令模板:Spring Boot + Nacos + MySQL
建議按順序執(zhí)行,每一步都可能定位到問題。
第一步:查看應(yīng)用日志(定位錯誤根源)
# 進(jìn)入日志目錄 cd /home/project-cloud/server/your-pro/module/logs/ # 實時查看日志,并高亮 ERROR 和 WARN tail -f *.log | grep --color=always -E "ERROR|WARN|Exception"
關(guān)注關(guān)鍵詞:
Failed to startDataSourceConnection refusedTimeoutClassNotFoundExceptionNoSuchBeanDefinitionException
第二步:確認(rèn)應(yīng)用是否在運行
# 查看 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ù)未啟動或已崩潰。
第三步:檢查端口是否監(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ù)未啟動或端口配置錯誤
第四步:測試網(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
# 測試本機服務(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)容(重點關(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 控制臺配置的 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 是否啟動
- 用戶權(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ù)啟動命令
# 查看你是如何啟動的 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)建一個診斷腳本 diagnose.sh:
#!/bin/bash echo "=== 診斷時間: $(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"
運行:
chmod +x diagnose.sh ./diagnose.sh > diagnose.log
把 diagnose.log 發(fā)給同事或發(fā)到群里,快速定位問題。
總結(jié):排查流程圖
啟動失敗? ↓ → 查日志(tail -f) ↓ → 看進(jìn)程(ps aux) ↓ → 查端口(ss -tulnp) ↓ → 測試連通(telnet/curl) ↓ → 檢查配置(bootstrap.yml + Nacos) ↓ → 驗證數(shù)據(jù)庫 ↓ → 檢查資源(CPU/內(nèi)存/磁盤) ↓ → 修復(fù)并重啟
建議:把這個模板保存為 troubleshoot.md 放在項目根目錄,團(tuán)隊共享。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實現(xiàn)的具有GUI的校園導(dǎo)航系統(tǒng)的完整代碼
這篇文章主要介紹了Java實現(xiàn)的具有GUI的校園導(dǎo)航系統(tǒng)的完整代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
Java并發(fā)編程:volatile關(guān)鍵字詳細(xì)解析
這篇文章主要介紹了Java并發(fā)編程:volatile關(guān)鍵字詳細(xì)解析,對學(xué)習(xí)volatile關(guān)鍵字有一定的認(rèn)識,有需要的可以了解一下。2016-11-11
idea創(chuàng)建的idea項目時springframework出現(xiàn)紅色的原因和解決方法
當(dāng)使用 IntelliJ IDEA 創(chuàng)建 Spring Framework 項目時,springframework 出現(xiàn)紅色可能是因為相關(guān)的 Spring Framework 依賴沒有正確加載或項目的配置有問題,本文給大家介紹了一些常見的原因和解決方法,需要的朋友可以參考下2023-09-09
Java基于fork/koin類實現(xiàn)并發(fā)排序
這篇文章主要介紹了Java基于fork/koin類實現(xiàn)并發(fā)排序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02
Springboot整合mybatisplus的項目實戰(zhàn)
本文主要介紹了Springboot整合mybatisplus的項目實戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
Spring?Cloud?中自定義外部化擴展機制原理及實戰(zhàn)記錄
這篇文章主要介紹了Spring?Cloud?中自定義外部化擴展機制原理及實戰(zhàn),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02

