Interview Prep Zoneby CuriouserLabs

Question 5 of 5 · architect level

What changed across Spring Boot 3.x that a tech lead must plan for — Jakarta, AOT/native, observability?

🎤 Say this first

Boot 3 line = Spring Framework 6, Java 17+ baseline, and the javax→jakarta namespace flip — the migration's long pole (every import, every library that touches Servlet/JPA/Validation must be jakarta-compatible). Plus: Micrometer-based Observation API unifying metrics+tracing (Sleuth retired), first-class GraalVM native image support via AOT processing, virtual-thread support (3.2+, one property), CRaC, RestClient/JdbcClient, and ProblemDetail error responses. Planning = dependency audit first (agents, filters, anything javax), then framework bumps, then feature adoption.

The full picture

  • Jakarta blast radius: not your imports alone — old Tomcat-dependent libs, servlet filters in internal libraries, JAXB usage, swagger/springfox (dead; move to springdoc), older APM agents. Run the OpenRewrite recipes, but budget for the stragglers.
  • Observability shift: Observation API means one instrumentation produces metrics and traces; adopt via starters (micrometer-tracing + OTLP export). If your platform predates it, plan the Sleuth removal explicitly.
  • AOT/native decision: AOT processing happens at build; closed-world constraints (reflection/resources/proxies need hints) mean library compatibility drives feasibility. Sweet spot: CLI tools, scale-to-zero/serverless, sidecars. Long-running JVM services usually keep C2's peak throughput instead.
  • Cadence governance: Boot minors ship ~6-monthly with ~13-month OSS support per line — 'stay current' must be a scheduled program (Renovate + a quarterly bump train), not an aspiration; 2.x is already end-of-OSS-support.
FeatureVersionLead-level takeaway
Jakarta EE 9/10 namespace3.0The migration cost center — audit libs first
Native image GA support3.0Per-service decision, not a fleet mandate
Virtual threads property3.2spring.threads.virtual.enabled=true — measure, then default for I/O services
RestClient / JdbcClient3.2Retire RestTemplate patterns without going reactive
Structured logging / CDS out-of-box3.4/3.3Cheap wins for ops and startup

🔄 Likely follow-up questions

  • What breaks first in a javax→jakarta migration in your experience?
  • How do you decide which services justify native image?
  • What's your strategy for tracking Boot's release cadence across many teams?