Most production Java runs on 21, and will move next to 29. That means four releases of changes arriving in one upgrade. Java 26 shipped HTTP/3 in the standard HTTP client, faster startup, a free garbage collector improvement, and the first warnings in the plan to make final fields truly final. Here is what helps you, what will break your reflection-heavy libraries, and how to reduce the risk of an upgrade you have not started.
Virtual threads make Java look like Go for concurrency — until you hit a synchronized block, a ThreadLocal hot path, or a pool you forgot to remove. A working engineer's guide to what actually changes and what to leave alone.
Treating LLM calls as just another upstream dependency. How to use Spring AI to build a multi-provider gateway with retries, circuit breakers, prompt versioning, and observability — the same hygiene you'd put around any external API.
Stop the thirty-PR CVE fire drill. How to centralize dependency versions across a microservice fleet using a Maven BOM or Gradle version catalog.
How to migrate a Spring Boot microservice fleet from Java 8 to Java 17 without downtime — the four layers, the order, the land mines, and the metric.
How to package global exception handling as a Spring Boot starter for a microservice fleet — RFC 7807 responses, no leaked stack traces, one dependency.