DEV Community

Cyrus Tse
Cyrus Tse

Posted on

Spring Boot 4 入門教學 - Part 8 (常見問題與排錯)

第八章:常見問題與排錯

8.1 連接資料庫常見問題

問題一:連接被拒絕

錯誤訊息:Connection to localhost:5432 refused.

解決方案:

  1. 檢查 PostgreSQL 服務是否正在運行
  2. 檢查連接埠是否正確(預設 5432)
  3. 檢查防火牆是否阻止了連接
  4. 檢查 pg_hba.conf 是否允許遠程連接
# 檢查 PostgreSQL 服務狀態(Linux)
sudo systemctl status postgresql

# 檢查 PostgreSQL 服務狀態(macOS)
brew services list | grep postgresql
Enter fullscreen mode Exit fullscreen mode

問題二:認證失敗

錯誤訊息:password authentication failed for user

解決方案:

  1. 檢查用戶名和密碼是否正確
  2. 檢查 pg_hba.conf 中的認證方式
  3. 確保用戶具有登入權限

問題三:資料庫不存在

錯誤訊息:database "myapp_db" does not exist

解決方案:

-- 創建資料庫
CREATE DATABASE myapp_db;

-- 授權給用戶
GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp_user;
Enter fullscreen mode Exit fullscreen mode

8.2 Spring Boot 啟動問題

問題一:埠口被佔用

錯誤訊息:Port 8080 was already in use

解決方案:

  1. 找出佔用埠口的程序並終止
  2. 或在 application.properties 中更改埠口
# 找出佔用 8080 埠口的程序
lsof -i :8080

# 殺死程序
kill -9 <PID>

# 或更改埠口
# server.port=8081
Enter fullscreen mode Exit fullscreen mode

問題二:依賴無法解析

解決方案:

  1. 重新整理 Maven/Gradle 依賴
  2. 清理本地緩存
# Maven
./mvnw dependency:resolve
./mvnw clean install -U

# Gradle
./gradlew dependencies
./gradlew clean build --refresh-dependencies
Enter fullscreen mode Exit fullscreen mode

8.3 JdbcTemplate 問題

問題一:無參數化查詢導致 SQL 注入

危險的程式碼:

// 千萬不要這樣做!
String sql = "SELECT * FROM users WHERE username = '" + username + "'";
jdbcTemplate.queryForObject(sql, ...);
Enter fullscreen mode Exit fullscreen mode

安全的做法:

// 使用參數化查詢
String sql = "SELECT * FROM users WHERE username = ?";
jdbcTemplate.queryForObject(sql, new Object[]{username}, ...);
Enter fullscreen mode Exit fullscreen mode

問題二:ResultSet 映射錯誤

確保資料庫欄位名稱與 Java 屬性名稱匹配,或者使用自定義的 RowMapper。

// 自定義 RowMapper
public class UserRowMapper implements RowMapper<User> {
    @Override
    public User mapRow(ResultSet rs, int rowNum) throws SQLException {
        User user = new User();
        user.setId(rs.getLong("id"));
        user.setUsername(rs.getString("username"));
        user.setEmail(rs.getString("email"));
        // 手動映射每個欄位
        return user;
    }
}
Enter fullscreen mode Exit fullscreen mode

8.4 學習資源推薦

官方文檔:

書籍推薦:

  • 《Spring Boot in Action》
  • 《Spring 實戰》

線上課程:

  • Spring 官方教程
  • Baeldung Spring 教程

結語

恭喜你完成了這個完整的 Spring Boot 4 入門教學!我們涵蓋了:

  1. Spring Boot 4 與 3 的差異:Java 版本需求、Jakarta EE 遷移、Spring Security 變化
  2. 建立第一個專案:Spring Initializr、專案結構、運行應用程式
  3. 核心概念:@SpringBootApplication、@bean、IoC/DI
  4. REST API 開發:@RestController、@GetMapping、CRUD 操作
  5. 資料庫連接:PostgreSQL 配置、JdbcTemplate 使用
  6. 完整專案實作:整合所有知識的 CRUD 專案

建議的後續學習路徑:

  1. 學習 Spring Data JPA 簡化資料庫操作
  2. 學習 Spring Security 實現用戶認證
  3. 學習 Spring Boot Actuator 監控應用程式
  4. 學習 Docker 容器化部署
  5. 學習雲原生開發

祝你學習順利,程式碼無 bug!

Top comments (0)