13 minutes / published
One Codebase, Two Databases: Two Ways to Enforce No Overlaps, Plus Shipping It
Postgres exclusion constraints, Oracle row locks, Testcontainers gates, and a read-only ARM demo deployment.
The Domain Rule Does Not Belong To One Vendor
The Palabas invariant is simple: one screen cannot host overlapping showtimes. Postgres enforces that with a GiST exclusion constraint. Oracle uses a screen-row mutex trigger and SELECT FOR UPDATE.
The two database designs differ because the vendors differ. The course keeps the domain rule stable and makes the enforcement mechanism explicit.
The CI Matrix Has A Cost Model
Fast tests run on every change. The Postgres Testcontainers lane proves the heavier persistence and observability behavior. The Oracle policy gate names when the expensive lane must run: main, release tags, or manual release workflows.
That is the practical version of cross-database support: pay the container cost where it protects decisions, and never pretend H2 has proven the deployment database.
The Demo Is Read-Only On Purpose
The demo profile blocks API writes before business logic. Public reads, Swagger, and health remain inspectable; Prometheus is reserved for authenticated scraping.
That split avoids fake public auth. Mutating security stays proven by integration tests, while the live demo exposes only the operational surface visitors can safely inspect.
ARM Shipping Is A Runbook, Not A Vibe
The Dockerfile builds a runtime image for linux/arm64. The GitHub workflow publishes to GHCR on release/manual runs. The deployment notes show the OCI host, environment injection, systemd service, and Caddy HTTPS boundary.
Secrets stay on the host. The repo contains an env example, not credentials.
Boot 3 To 4 Delta
The shipping story mostly lives outside the framework version: container image, CI gates, profile config, and HTTPS edge are architectural choices.
Boot 4 matters because the actuator, structured logging, and security defaults are the runtime surface you expose. The release still has to prove them with curl, metrics, logs, and tests.