跳至主要内容

故障排除

本文檔整理花店管理系統常見問題及解決方案。

應用程式啟動問題

資料庫連線失敗

症狀

HikariPool-1 - Exception during pool initialization.
org.postgresql.util.PSQLException: Connection refused

解決方案

  1. 確認資料庫服務正在運行
  2. 檢查連線字串
  3. 確認防火牆設定
# 測試資料庫連線
psql -h localhost -U florist -d florist

# 檢查 PostgreSQL 服務
systemctl status postgresql

Flyway 遷移失敗

症狀

FlywayException: Validate failed: Migration checksum mismatch

解決方案

  1. 不要修改已執行的遷移腳本
  2. 如需重建,使用 flywayRepair
./gradlew flywayRepair
./gradlew flywayMigrate

Port 被佔用

症狀

Web server failed to start. Port 8080 was already in use.

解決方案

# 找出佔用的程序
lsof -i :8080

# 終止程序
kill -9 <PID>

# 或更改應用程式端口
java -jar app.jar --server.port=8081

運行時問題

OutOfMemoryError

症狀

java.lang.OutOfMemoryError: Java heap space

解決方案

  1. 增加 JVM 記憶體
  2. 檢查是否有記憶體洩漏
# 增加記憶體
java -Xms512m -Xmx2g -jar app.jar

# 開啟 heap dump
java -XX:+HeapDumpOnOutOfMemoryError -jar app.jar

連線池耗盡

症狀

HikariPool-1 - Connection is not available, request timed out after 30000ms

解決方案

  1. 檢查是否有未關閉的連線
  2. 增加連線池大小
  3. 縮短連線超時
spring:
datasource:
hikari:
maximum-pool-size: 20
connection-timeout: 20000
leak-detection-threshold: 60000

快取問題

症狀:資料更新後顯示舊資料

解決方案

  1. 確認快取失效邏輯正確
  2. 手動清除快取
# 透過 Actuator 清除快取
curl -X POST http://localhost:8080/actuator/caches/products/clear

前端問題

CORS 錯誤

症狀

Access to XMLHttpRequest has been blocked by CORS policy

解決方案

app:
cors:
allowed-origins:
- http://localhost:5173
- https://florist.leandev.io
allowed-methods:
- GET
- POST
- PUT
- PATCH
- DELETE

CSP 違規

症狀

Refused to execute inline script because it violates the following CSP directive

解決方案

  1. 確認 script 標籤有 nonce 屬性
  2. 檢查 CSP header 配置

靜態資源 404

症狀:CSS、JS 檔案載入失敗

解決方案

  1. 確認前端建置輸出正確
  2. 檢查 base href 配置
# 確認檔案存在
ls -la src/main/resources/static/assets/

認證問題

Token 過期

症狀

401 Unauthorized: Token has expired

解決方案

  1. 實作 token refresh 邏輯
  2. 檢查 token 過期時間設定

權限不足

症狀

403 Forbidden: Access Denied

解決方案

  1. 確認使用者角色
  2. 檢查 API 權限設定
# 查看使用者權限
SELECT a.username, r.name as role, auth.name as authority
FROM account a
JOIN account_roles ar ON a.id = ar.account_id
JOIN role r ON ar.role_id = r.id
JOIN role_authorities ra ON r.id = ra.role_id
JOIN authority auth ON ra.authority_id = auth.id
WHERE a.username = 'admin';

效能問題

慢查詢

診斷

spring:
jpa:
show-sql: true
properties:
hibernate:
format_sql: true
generate_statistics: true

解決方案

  1. 新增索引
  2. 優化查詢
  3. 使用快取

高 CPU 使用率

診斷

# 查看執行緒狀態
jstack <PID> > thread_dump.txt

# 查看 CPU 使用
top -H -p <PID>

日誌分析

啟用詳細日誌

logging:
level:
io.leandev: DEBUG
org.springframework.security: DEBUG
org.hibernate.SQL: DEBUG
org.hibernate.type.descriptor.sql: TRACE

常用日誌位置

環境位置
本地開發Console 輸出
Tomcat/opt/tomcat/logs/catalina.out
Dockerdocker logs <container>

取得協助

如果以上方案無法解決問題:

  1. 收集相關日誌
  2. 記錄重現步驟
  3. 聯繫開發團隊

下一步