Spring Boot 3.2: The Features I Actually Use
Past the release notes - here's what's earning its keep on real projects.
Spring Boot 3.2 shipped a lot. Most teams are using maybe 20% of it. Here's the 20% that's worth knowing about.
Spring Boot 3.2 is the version I default to for new Java projects. Here's the slice I actually use, and what I skip.
What I use daily
Virtual threads (Project Loom). spring.threads.virtual.enabled=true and your blocking IO becomes essentially free in terms of thread cost. For services that mostly wait on databases or external APIs, this is transformative. I've seen p99 throughput improve 4x with no other changes.
Improved Docker image building (buildpacks integration). One-line config to get optimized layered images.
Better observability defaults. Micrometer, OpenTelemetry support out of the box. Less plumbing.
Native image support (with GraalVM). Worth using for Lambda or low-startup-cost workloads. (See my dedicated post on this.)
What I skip
- The new RestClient API. I use WebClient or even just
HttpClientfrom the JDK. Less Spring magic to debug. - A lot of the Spring Cloud kitchen sink. Most teams need
@RestController+spring-boot-starter-data-jpa+ a few specific things. The rest is optional.
A typical project skeleton
For a backend service in 2025:
- Spring Boot 3.2 with virtual threads on
- Java 21 (LTS, virtual thread native support)
- Postgres + Spring Data JPA (or jOOQ for complex queries)
- Flyway for migrations
- Micrometer + OTel for observability
- Testcontainers for integration tests
- GitHub Actions CI
That's the skeleton I clone. It handles 90% of cases.
Java 21 + virtual threads - the killer combo
Old model: thread per request, expensive, capped at ~200 concurrent (depending on memory and JVM tuning).
New model: virtual thread per request, ~10K concurrent on the same hardware, JVM scheduler manages the actual OS threads.
For services that wait a lot (most services), this is essentially "free concurrency."
What still matters: don't hold long-lived synchronization on virtual threads. Don't pin them to OS threads with synchronized blocks. Read the Loom guide once.
The boring verdict
Spring Boot 3.2 is the most pleasant Spring I've used. The 1.x days were painful. 2.x was good. 3.x is excellent.
If you're stuck on 2.x, plan a migration. The upgrade is mostly painless if you've kept your dependencies current.