第八章:常見問題與排錯
8.1 連接資料庫常見問題
問題一:連接被拒絕
錯誤訊息:Connection to localhost:5432 refused.
解決方案:
- 檢查 PostgreSQL 服務是否正在運行
- 檢查連接埠是否正確(預設 5432)
- 檢查防火牆是否阻止了連接
- 檢查 pg_hba.conf 是否允許遠程連接
# 檢查 PostgreSQL 服務狀態(Linux)
sudo systemctl status postgresql
# 檢查 PostgreSQL 服務狀態(macOS)
brew services list | grep postgresql
問題二:認證失敗
錯誤訊息:password authentication failed for user
解決方案:
- 檢查用戶名和密碼是否正確
- 檢查 pg_hba.conf 中的認證方式
- 確保用戶具有登入權限
問題三:資料庫不存在
錯誤訊息:database "myapp_db" does not exist
解決方案:
-- 創建資料庫
CREATE DATABASE myapp_db;
-- 授權給用戶
GRANT ALL PRIVILEGES ON DATABASE myapp_db TO myapp_user;
8.2 Spring Boot 啟動問題
問題一:埠口被佔用
錯誤訊息:Port 8080 was already in use
解決方案:
- 找出佔用埠口的程序並終止
- 或在 application.properties 中更改埠口
# 找出佔用 8080 埠口的程序
lsof -i :8080
# 殺死程序
kill -9 <PID>
# 或更改埠口
# server.port=8081
問題二:依賴無法解析
解決方案:
- 重新整理 Maven/Gradle 依賴
- 清理本地緩存
# Maven
./mvnw dependency:resolve
./mvnw clean install -U
# Gradle
./gradlew dependencies
./gradlew clean build --refresh-dependencies
8.3 JdbcTemplate 問題
問題一:無參數化查詢導致 SQL 注入
危險的程式碼:
// 千萬不要這樣做!
String sql = "SELECT * FROM users WHERE username = '" + username + "'";
jdbcTemplate.queryForObject(sql, ...);
安全的做法:
// 使用參數化查詢
String sql = "SELECT * FROM users WHERE username = ?";
jdbcTemplate.queryForObject(sql, new Object[]{username}, ...);
問題二: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;
}
}
8.4 學習資源推薦
官方文檔:
- Spring Boot 官方文檔:https://docs.spring.io/spring-boot/docs/current/reference/html/
- Spring Framework 文檔:https://docs.spring.io/spring-framework/reference/
- PostgreSQL 文檔:https://www.postgresql.org/docs/
書籍推薦:
- 《Spring Boot in Action》
- 《Spring 實戰》
線上課程:
- Spring 官方教程
- Baeldung Spring 教程
結語
恭喜你完成了這個完整的 Spring Boot 4 入門教學!我們涵蓋了:
- Spring Boot 4 與 3 的差異:Java 版本需求、Jakarta EE 遷移、Spring Security 變化
- 建立第一個專案:Spring Initializr、專案結構、運行應用程式
- 核心概念:@SpringBootApplication、@bean、IoC/DI
- REST API 開發:@RestController、@GetMapping、CRUD 操作
- 資料庫連接:PostgreSQL 配置、JdbcTemplate 使用
- 完整專案實作:整合所有知識的 CRUD 專案
建議的後續學習路徑:
- 學習 Spring Data JPA 簡化資料庫操作
- 學習 Spring Security 實現用戶認證
- 學習 Spring Boot Actuator 監控應用程式
- 學習 Docker 容器化部署
- 學習雲原生開發
祝你學習順利,程式碼無 bug!
Top comments (0)