| H2 in-memory | Testcontainers | |
|---|---|---|
| Tốc độ | Cực nhanh (~ms) | Chậm (~5-10s startup) |
| Setup | Không cần Docker | Cần Docker daemon |
| Fidelity | Thấp — dialect khác prod | Cao — DB thật |
| Stored proc, extension | ❌ | ✅ |
| Migration (Flyway) | Đôi khi fail (dialect) | ✅ |
Vấn đề H2: SQL chạy OK trên H2 nhưng fail prod vì khác dialect (NOW() vs CURRENT_TIMESTAMP, JSON column, regex, full-text) → false sense of safety.
Hybrid (recommended): H2 cho dev loop nhanh; Testcontainers trong PR/CI để bắt integration bug; không dùng shared test DB (flaky, data pollution).
Dùng Testcontainers cho: critical path (payment, order), migration script, stored procedure, native query.
2026: Testcontainers thành standard — Spring Boot 3.1+ @ServiceConnection giảm config; CI cloud (GitHub Actions...) có sẵn Docker.