🎯 目標
/api/recommendations 加入快取與速率保護,降低 DB 壓力
內建健康檢查/應用指標(metrics & tracing 起手式)
自動化文件(OpenAPI)與 Postman/HTTP 檔
可重現的啟動:Docker Compose(App + MySQL)與環境參數
🛠 工作項目
快取(Caffeine)
依 effectId 緩存 3–5 分鐘(可調):@Cacheable(cacheNames="recos", key="#effectId")
失效策略:寫入 evidence 後(未來 ETL)用事件或管理端點清除
基本限流(rate limit)
簡易版:每 IP 每分鐘 N 次(Servlet filter 或 Bucket4j);先保守設 N=60
健康檢查與監控
加入 spring-boot-starter-actuator
開 health, info, metrics, httpexchanges 端點
指標關注:http.server.requests, jdbc.connections.active, 自訂 recommendations.calctime
OpenAPI 文件
加 springdoc-openapi-starter-webmvc-ui
自動產出 /v3/api-docs、Swagger UI /swagger-ui.html
替 /api/recommendations 補註解(參數說明/範例回應)
Postman / .http 測試檔
提供 postman_collection.json 或 requests.http(VS Code REST Client)
設定管理
application.yml → application-local.yml(mac 開發),application-prod.yml(未來)
把 DB、port、cache TTL 全改為環境參數(支援 SPRING_DATASOURCE_*)
Docker 化(在 M4 Air 可用)
Dockerfile(基於 eclipse-temurin:21-jre)
docker-compose.yml:app + mysql:8.4(掛載初始化 SQL)
Makefile:make up / down / logs
📦 交付物
pom.xml:加入
spring-boot-starter-actuator
springdoc-openapi-starter-webmvc-ui
com.github.ben-manes.caffeine:caffeine
config/:application.yml, application-local.yml
controller/RecommendationController.java:保留 Day7 參數驗證
service/RecommendationServiceImpl.java:加 @Cacheable、記錄計時到 MeterRegistry
config/CacheConfig.java(Caffeine Bean)
Dockerfile, docker-compose.yml, Makefile
docs/postman_collection.json 或 requests.http
README_DAY8.md:啟動、測試、清 cache、看 metrics 教學
✅ 驗收清單
curl http://localhost:8081/actuator/health → UP
curl "http://localhost:8081/api/recommendations?effectId=E001" → 首次 > 後續更快(快取命中)
curl http://localhost:8081/actuator/metrics/http.server.requests → 有路徑指標
打開 http://localhost:8081/swagger-ui.html → 能瀏覽與測試 API
docker compose up -d → App + DB 一起起;docker compose logs -f app 可觀察啟動
超過速率時回 429(若啟用限流)