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- 資料存取






