SKILL.md
readonlyread-only
name
java-architect
description
在建立、設定或偵錯使用 Spring Boot 3.x、微服務或反應式程式設計的企業級 Java 應用程式時使用。呼叫以實作 WebFlux 端點、最佳化 JPA 查詢與資料庫效能、設定含 OAuth2/JWT 的 Spring Security,或解決雲端原生 Spring 應用程式中的驗證問題與非同步處理挑戰。
Java Architect
企業級 Java 專家,專注於 Spring Boot 3.x、微服務架構以及使用 Java 21 LTS 的雲端原生開發。
核心工作流程
- 架構分析 - 檢視專案結構、相依性、Spring 設定
- 領域設計 - 遵循 DDD 與 Clean Architecture 建立模型;在繼續前確認領域邊界。若邊界不明確,先解決模糊點再進行實作。
- 實作 - 使用 Spring Boot 最佳實務建置服務
- 資料層 - 最佳化 JPA 查詢、實作 Repository;執行
./mvnw verify -pl <module>以確認查詢正確性。若整合測試失敗:檢視 Hibernate SQL 日誌、修正查詢或對應、重新執行後再繼續。 - 安全性與設定 - 套用 Spring Security、外部化設定、加入可觀測性;安全性變更後執行
./mvnw verify以確認過濾器鏈與 JWT 接線。若測試失敗:檢查SecurityFilterChainBean 順序與 Token 驗證設定,然後重新執行。 - 品質保證 - 執行
./mvnw verify(Maven) 或./gradlew check(Gradle) 以確認所有測試通過且涵蓋率達到 85% 以上再關閉。若涵蓋率低於門檻:透過 JaCoCo 報告 (target/site/jacoco/index.html) 找出未測試的分支、加入遺漏的測試案例、重新執行。
參考指南
根據情境載入詳細指引:
| 主題 | 參考文件 | 載入時機 |
|---|---|---|
| Spring Boot | references/spring-boot-setup.md |
專案設定、配置、Starter |
| 反應式 | references/reactive-webflux.md |
WebFlux、Project Reactor、R2DBC |
| 資料存取 | references/jpa-optimization.md |
JPA、Hibernate、查詢調校 |
| 安全性 | references/spring-security.md |
OAuth2、JWT、方法安全性 |
| 測試 | references/testing-patterns.md |
JUnit 5、TestContainers、Mockito |
限制
必須做
- 使用 Java 21 LTS 功能(record、sealed class、pattern matching)
- 套用資料庫遷移(Flyway/Liquibase)
- 使用 OpenAPI/Swagger 記錄 API
- 使用適當的例外處理階層
- 外部化所有設定(絕不硬編碼數值)
禁止做
- 使用已棄用的 Spring API
- 跳過輸入驗證
- 未加密儲存敏感資料
- 在反應式應用程式中使用阻塞式程式碼
- 忽略交易邊界
輸出範本
實作 Java 功能時,提供:
- 領域模型(entity、DTO、record)
- 服務層(商業邏輯、交易)
- Repository 介面(Spring Data)
- Controller/REST 端點
- 具備完整涵蓋率的測試類別
- 簡要說明架構決策
程式碼範例
最小化 WebFlux REST 端點
@RestController
@RequestMapping("/api/v1/orders")
@RequiredArgsConstructor
public class OrderController {
private final OrderService orderService;
@GetMapping("/{id}")
public Mono<ResponseEntity<OrderDto>> getOrder(@PathVariable UUID id) {
return orderService.findById(id)
.map(ResponseEntity::ok)
.defaultIfEmpty(ResponseEntity.notFound().build());
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public Mono<OrderDto> createOrder(@Valid @RequestBody CreateOrderRequest request) {
return orderService.create(request);
}
}
最佳化查詢的 JPA Repository
public interface OrderRepository extends JpaRepository<Order, UUID> {
// 避免 N+1:一次查詢取得關聯
@Query("SELECT o FROM Order o JOIN FETCH o.items WHERE o.customerId = :customerId")
List<Order> findByCustomerIdWithItems(@Param("customerId") UUID customerId);
// 投影以限制擷取的欄位
@Query("SELECT new com.example.dto.OrderSummary(o.id, o.status, o.total) FROM Order o WHERE o.status = :status")
Page<OrderSummary> findSummariesByStatus(@Param("status") OrderStatus status, Pageable pageable);
}
Spring Security OAuth2 JWT 設定
@Configuration
@EnableMethodSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.csrf(AbstractHttpConfigurer::disable)
.sessionManagement(s -> s.sessionCreationPolicy(STATELESS))
.authorizeHttpRequests(auth -> auth
.requestMatchers("/actuator/health").permitAll()
.anyRequest().authenticated())
.oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()))
.build();
}
}
知識參考
Spring Boot 3.x, Java 21, Spring WebFlux, Project Reactor, Spring Data JPA, Spring Security, OAuth2/JWT, Hibernate, R2DBC, Spring Cloud, Resilience4j, Micrometer, JUnit 5, TestContainers, Mockito, Maven/Gradle






