Spring Boot 4: novedades y migración desde Spring Boot 3
Spring Boot 4 es la versión que acompaña a Spring Framework 7, publicada en noviembre de 2025. Requiere Java 17+, trae @Retryable integrado sin dependencias externas, soporte nativo para Virtual Threads y está optimizado para Java 25. Si ya estás en Spring Boot 3, aquí tienes qué cambia y cómo planificar la migración.
Versiones de Spring Boot: la secuencia correcta {#versiones-spring-boot}
Un punto de confusión habitual: no existe “Spring Boot 6”. La numeración de Spring Boot y Spring Framework son independientes:
| Spring Boot | Spring Framework | Java mínimo | Java recomendado | Estado |
|---|---|---|---|---|
| Spring Boot 2.x | Spring 5.3.x | Java 8 | Java 11/17 | EOL |
| Spring Boot 3.x | Spring 6.x | Java 17 | Java 21 (LTS) | Mantenimiento |
| Spring Boot 4.x | Spring 7.x | Java 17 | Java 25 | Activo |
¿Qué es nuevo en Spring Boot 4? {#novedades-spring-boot-4}
Spring Boot 4 hereda todas las novedades de Spring Framework 7 y añade su propia capa de autoconfiguración:
@Retryable integrado sin dependencias externas {#retryable}
En Spring Boot 3 y anteriores, para añadir reintentos automáticos necesitabas la dependencia externa spring-retry. En Spring Boot 4 (Spring Framework 7), @Retryable es una anotación de primera clase del núcleo:
@Service
public class PagosService {
@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 1000))
public void procesarPago(Pago pago) {
// se reintenta automáticamente si lanza RuntimeException
pasarelaExterna.cobrar(pago);
}
@Recover
public void recuperar(RuntimeException ex, Pago pago) {
// fallback cuando se agotan los reintentos
log.error("Pago fallido tras 3 intentos: {}", pago.getId());
}
}
Virtual Threads nativos con Project Loom {#virtual-threads}
Spring Boot 4 arranca con el executor de Virtual Threads activado por defecto cuando la JVM es Java 21+. Esto permite manejar miles de peticiones concurrentes sin el overhead de threads del SO:
# application.properties — activo por defecto en Java 21+
spring.threads.virtual.enabled=true
El impacto en APIs con alta I/O (bases de datos, llamadas HTTP) puede suponer una reducción del 40-60% en el uso de threads del sistema sin cambiar el código de negocio.
@HttpServiceClient: clientes HTTP declarativos mejorados {#http-service-client}
Spring Framework 7 introduce @HttpServiceClient como evolución de las HTTP Interfaces de Spring 6:
@HttpServiceClient(url = "${api.usuarios.url}")
public interface UsuarioClient {
@GetExchange("/usuarios/{id}")
Usuario getUsuario(@PathVariable Long id);
@PostExchange("/usuarios")
Usuario crearUsuario(@RequestBody NuevoUsuario usuario);
}
Spring Boot 4 autoconfigura el cliente automáticamente si el bean está en el contexto; no necesitas el builder manual de Spring 6.
Modularización completa y null-safety {#null-safety}
Spring Boot 4 adopta JSpecify para anotaciones de null-safety en toda la API pública. El compilador puede detectar NullPointerException en tiempo de compilación sin necesidad de herramientas externas.
¿Qué cambia de Spring Boot 3 a Spring Boot 4? {#migracion-spring-boot-3-a-4}
La migración de Spring Boot 3 a Spring Boot 4 es menos traumática que la de Boot 2 a Boot 3 (no hay cambio de namespace). Los cambios principales son:
| Área | Spring Boot 3.x | Spring Boot 4.x |
|---|---|---|
| Servidor embebido | Tomcat 10.1 | Tomcat 11 |
| Spring Security | Configuración Lambda | Lambda + nuevos métodos |
| Spring Data | Jakarta EE 9/10 | Jakarta EE 10/11 |
| Actuator | Endpoints estables | Nuevos endpoints de Virtual Threads |
@Retryable | Requiere spring-retry | Integrado en el core |
| Spring Batch | Versión 5.x | Versión 6.x |
Pasos de migración {#pasos-migracion}
- Actualiza Java a 21 o 25 — Aunque Boot 4 acepta Java 17, los Virtual Threads solo están disponibles en Java 21+.
- Cambia la versión del parent en
pom.xml:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>4.0.0</version> </parent> - Elimina la dependencia
spring-retrysi la usabas solo para@Retryable— ya está en el core. - Actualiza Tomcat si tienes Tomcat embebido externo: debe ser Tomcat 11.
- Revisa Spring Security — Algunos métodos deprecated en Boot 3 se eliminaron en Boot 4.
- Ejecuta los tests — La ausencia de cambio de namespace facilita enormemente la transición.
Spring Boot 4 vs Spring Boot 3: cuándo migrar {#cuando-migrar}
| Situación | Recomendación |
|---|---|
| Proyecto nuevo | Empieza directamente con Spring Boot 4 |
| Proyecto en Boot 3 activo en producción | Migra cuando el equipo tenga un sprint de infraestructura dedicado |
| Proyecto en Boot 2 | Migra primero a Boot 3, luego a Boot 4 en dos pasos |
Proyecto en Boot 2 con javax.* sin migrar | Prioriza la migración Jakarta antes de pasar a Boot 4 |
Para entender en profundidad qué cambió en Spring Framework 7 (la base de Spring Boot 4), consulta la guía Spring 6 vs Spring 7.
¿Tienes dudas sobre la migración? Si gestionas múltiples microservicios Spring en producción, hablemos — diseño hojas de ruta de modernización que minimizan el riesgo operativo.