java-spring-boot

java-spring-boot

建立生產級 Spring Boot 應用程式 - REST API、安全性、資料、Actuator

40星標
0分支
更新於 2026/7/10
SKILL.md
readonlyread-only
name
java-spring-boot
description

建立生產級 Spring Boot 應用程式 - REST API、安全性、資料、Actuator

version
3.0.0

Java Spring Boot 技能

使用現代最佳實務建立生產就緒的 Spring Boot 應用程式。

概述

此技能涵蓋 Spring Boot 開發,包括 REST API、安全性設定、資料存取、Actuator 監控與雲端整合。遵循 Spring Boot 3.x 模式,強調生產就緒。

何時使用此技能

當您需要:

  • 使用 Spring MVC/WebFlux 建立 REST API
  • 設定 Spring Security(OAuth2、JWT)
  • 使用 Spring Data 設定資料庫存取
  • 啟用 Actuator 監控
  • 整合 Spring Cloud

涵蓋主題

Spring Boot 核心

  • 自動設定與 starters
  • 應用程式屬性與設定檔
  • Bean 生命週期與設定
  • DevTools 與熱載入

REST API 開發

  • @RestController 與 @RequestMapping
  • 請求/回應處理
  • 使用 Bean Validation 驗證
  • 使用 @ControllerAdvice 例外處理

Spring Security

  • SecurityFilterChain 設定
  • OAuth2 與 JWT 認證
  • 方法安全性(@PreAuthorize)
  • CORS 與 CSRF 設定

Spring Data JPA

  • Repository 模式
  • 查詢方法與 @Query
  • 分頁與排序
  • 審計與交易

Actuator 與監控

  • 健康檢查與探針
  • 使用 Micrometer 的指標
  • 自訂端點
  • Prometheus 整合

快速參考

// REST Controller
@RestController
@RequestMapping("/api/users")
@Validated
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        return userService.findById(id)
            .map(ResponseEntity::ok)
            .orElse(ResponseEntity.notFound().build());
    }

    @PostMapping
    public ResponseEntity<User> createUser(@Valid @RequestBody UserRequest request) {
        User user = userService.create(request);
        URI location = URI.create("/api/users/" + user.getId());
        return ResponseEntity.created(location).body(user);
    }
}

// Security Configuration
@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        return http
            .csrf(csrf -> csrf.disable())
            .sessionManagement(s -> s.sessionCreationPolicy(STATELESS))
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/actuator/health/**").permitAll()
                .requestMatchers("/api/public/**").permitAll()
                .anyRequest().authenticated())
            .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()))
            .build();
    }
}

// Exception Handler
@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(EntityNotFoundException.class)
    public ProblemDetail handleNotFound(EntityNotFoundException ex) {
        return ProblemDetail.forStatusAndDetail(NOT_FOUND, ex.getMessage());
    }
}

設定範本

# application.yml
spring:
  application:
    name: ${APP_NAME:my-service}
  profiles:
    active: ${SPRING_PROFILES_ACTIVE:local}
  jpa:
    open-in-view: false
    properties:
      hibernate:
        jdbc.batch_size: 50

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus
  endpoint:
    health:
      probes:
        enabled: true

server:
  error:
    include-stacktrace: never

常見模式

分層架構

Controller → Service → Repository → Database
     ↓           ↓          ↓
   DTOs      Entities    Entities

驗證模式

public record CreateUserRequest(
    @NotBlank @Size(max = 100) String name,
    @Email @NotBlank String email,
    @NotNull @Min(18) Integer age
) {}

疑難排解

常見問題

問題 原因 解決方案
Bean 找不到 缺少 @Component 加上註解或 @Bean
循環依賴 建構子注入 使用 @Lazy 或重構
401 未授權 安全性設定 檢查 permitAll 路徑
啟動緩慢 大量自動設定 排除未使用的 starters

除錯屬性

debug=true
logging.level.org.springframework.security=DEBUG
spring.jpa.show-sql=true

除錯檢查清單

□ 檢查 /actuator/conditions
□ 確認啟用的設定檔
□ 檢視安全性過濾鏈
□ 檢查 Bean 定義
□ 測試健康端點

使用方式

Skill("java-spring-boot")

相關技能

  • java-testing - Spring 測試模式
  • java-jpa-hibernate - 資料存取