Skip to main content

Spring

Spring Data JPA 3 to 4 Migration Guide: Query Derivation Changes, the hibernate-processor Coordinate Swap, and Value-Objects

A beginner-to-advanced guide to migrating the repository layer from Spring Data JPA 3 to 4 on Spring Boot 4.1: the hibernate-jpamodelgen → hibernate-processor coordinate swap and the silent metamodel failure it causes, why derived queries now generate JPQL instead of CriteriaQuery (and the getSingleResultOrNull edge case), records as @Embeddable value objects and projection targets, JSpecify nullability, the refined Specification API, and the removed config that breaks your build — all mapped to real code and errors on a Spring Boot 4.1 app.

Surviving the AI Vulnerability Wave: How to Automate Spring Boot Dependency Patches

AI scanners are flooding the Spring ecosystem with patch PRs faster than any team can review. Build an automated remediation pipeline instead: Dependabot or Renovate tuned for Spring Boot parent POMs and BOMs, a Testcontainers regression gate that decides which bumps are safe, and canary deployments for minor framework upgrades.

Spring Security 5 to 6 to 7 Migration: SecurityFilterChain, Lambda DSL, and the Silent Authorization Changes

Of every breaking change in the Spring Boot 2 → 3 era, the removal of WebSecurityConfigurerAdapter generated the most confused stack traces I've debugged — because security configuration is the one place where "it compiles and runs" tells you almost nothing about whether it still protects anything. This guide migrates Spring Security 5 configurations to the 6.x component model (Spring Boot 3.x), covers what tightens further in Spring Security 7 (Spring Boot 4), and flags the places where a mechanical conversion quietly changes your authorization behaviour.

RestTemplate to RestClient Migration Guide: Method Mapping, Error Handling, and the exchange() Trap

Spring Boot 4 finally forced the issue: RestTemplate, in maintenance mode since Spring 5, is out of the recommended path, and codebases full of getForObject() and exchange() calls need a plan. The good news is that RestClient (introduced in Spring 6.1 / Boot 3.2) was designed as the synchronous successor, so this migration is mostly mechanical — if you know the method-by-method mapping and the three places where behaviour quietly differs. This guide gives you both.

Zuul to Spring Cloud Gateway Migration: Routes, Filters, and the Blocking-Call Traps

The first time I ported a Zuul gateway to Spring Cloud Gateway, the routes took an afternoon — and the filters took two weeks. That ratio surprises every team that attempts this migration, because the route configuration looks superficially similar while the filter model is a different universe: Zuul 1 is a blocking servlet filter chain, Spring Cloud Gateway runs on Netty with Project Reactor, and a single hidden blocking call in a ported filter can stall your entire gateway. This guide covers the route conversion, the filter-by-filter port, and the blocking-call traps, in that order.

Spring Cloud Netflix to Modern Alternatives: The Complete Migration Guide (2026)

In 2020 I published a dozen tutorials on this site covering Eureka, Hystrix, Zuul, Ribbon, and Feign — the Spring Cloud Netflix stack. They were accurate then. Today, most of that stack is dead: Netflix put Hystrix into maintenance mode back in 2018, Zuul 1 and Ribbon followed, and the Spring team removed them from the Spring Cloud release train entirely. If you are still running any of these libraries on Spring Boot 2.x, this guide maps every Netflix component to its modern replacement and shows you the actual migration steps — including the parts that break.

Spring Boot 4 HTTP Service Clients: Build REST Clients with Just an Interface

A complete, hands-on guide to HTTP Service Clients in Spring Boot 4 and Spring Framework 7. Learn how to replace RestTemplate and manual WebClient boilerplate with declarative @HttpExchange interfaces, configure service groups via @ImportHttpServices, set per-group timeouts and base URLs with application.properties, test with @RestClientTest, and migrate from OpenFeign — with fully annotated production-grade code and sample output.