Spring Boot 3 y Spring 6 publicados!

Fue por febrero de 2018 cuando apareció Spring Boot 2.0, la primera release de la línea Spring Boot 2.X, en mayo de 2022 apareció la última release, Spring Boot 2.7, en estos 4 años se han publicado 95 release de Spring Boot.

En noviembre de 2022 se ha publicado Spring Boot 3.0, que, como era de esperar incluye importantes novedades, veamos algunas:

Java 17

Aunque Spring Boot ya tenía soporte para Java 17 antes, esta versión LTS es ahora la línea de base de Spring Boot 13.

Esto permite que los desarrolladores se beneficien de algunas de las novedades de Java, como estas:

(Más detalle sobre novedades de las últimas versiones de Java 17, 16, 15, 14, 13, y 12.

Records

Los Java records fueron pensados como una forma rápida de crear clases de datos, es decir, las clases cuyo objetivo es simplemente contener datos y transportarlos entre módulos, también conocidas como POJOs (Plain Old Java Objects) y DTOs (Data Transfer Objects).

Así una clase como esta (para la que muchos usamos Lombok para evitar todo ese código repetitivo):

Como Record quedaría (los métodos equals(), hashCode() y toString() se generarán automáticamente para los registros. los getters no siguen el patrón habitual de getId(), getName(). En su lugar, se generarán métodos accessor como person.id() y person.name().

Text Blocks

Con JEP 378, ahora es posible crear bloques de texto de varias líneas sin necesidad de concatenar cadenas en los saltos de línea:

Jakarta EE 9

El cambio más importante podría ser el salto de Java EE a Jakarta EE9 (el espacio de nombres del paquete ha cambiado de javax.* a jakarta.*). Esto implica ajustar todas las importaciones en nuestro código siempre que usemos clases de Java EE directamente.

Por ejemplo, cuando accedemos al objeto HttpServletRequest dentro de nuestro Controlador Spring MVC, necesitamos reemplazar:

import javax.servlet.http.HttpServletRequest;

por:

import jakarta.servlet.http.HttpServletRequest;

También debemos tenerlo en cuenta cuando utilicemos bibliotecas externas que dependan de Java/Jakarta EE (por ejemplo, tenemos que utilizar Hibernate Validator 7+, Tomcat 10+ y Jetty 11+).

Grandes Novedades

Pero sin duda lo que más atención ha despertado de Spring Boot 3 y Spring 6 son estos 2 conceptos: Ejecutables Nativos y Observabilidad

Ejecutables nativos:

Construir ejecutables nativos y desplegarlos en GraalVM tiene una mayor prioridad. Así que la iniciativa Spring Native se traslada a Spring (más info).

Para la generación de AOT, no hay necesidad de incluir plugins separados, podemos simplemente usar un nuevo goal del plugin spring-boot-maven:

Observabilidad

Con Spring 6, hubo una iniciativa de Observabilidad que terminó con un nuevo Micrometer El API de observación y con el antiguo proyecto Spring Cloud Sleuth se migraron a Micrometer Tracing. Esto es más para registrar eficientemente las métricas de la aplicación con Micrometer, e implementar el rastreo a través de proveedores, como OpenZipkin o OpenTelemetry.

Hay una configuración automática para todo esto en Spring Boot 3, y los proyectos de Spring están trabajando en instrumentarse a sí mismos usando la API de observación.

Cómo migrar a Spring Boot 3

Seguro que si habéis llegado hasta aquí, ya estáis pensando en los pasos para migrar a Spring Boot 3.

Los pasos recomendados por el equipo de Spring son:

There are a few hints for project migration that we should know. The recommended steps are:

  1. Migrar a Spring Boot 2.7 (en Spring Boot 3 hay una guía de migración basada en Spring Boot 2.7)
  2. Comprobar el uso de código obsoleto y legacy config file processing
  3. Migrar a Java 17
  4. Comprobar que los proyectos de terceros tienen versiones compatibles con Jakarta EE 9
  5. Migrar a Spring Boot 3.0.0: https://spring.io/projects/spring-boot