| Info |
|---|
En construcción... |
| Tabla de contenidos |
|---|
Siguiendo esta guía de migración: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide
La versión mínima de Spring Boot para Java 21 es 3.2.
Se irá completando esta guía con las cosas que nos afecten.
Revisar versiones de dependencias y plugins
Revisar las dependencias de cada proyecto y ver que sean compatibles con spring boot 3.2.x y Java 21. Versiones que provee Spring Boot 3.0: https://docs.spring.io/spring-boot/docs/3.0.x/reference/html/dependency-versions.html#appendix.dependency-versions.properties.
Revisando el parent fundewebjs-api-parent, veo estas versiones:
| Bloque de código |
|---|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <resource.delimiter>@</resource.delimiter> <spring-boot.version>2.7.18</spring-boot.version> <spring-cloud.version>2021.0.9</spring-cloud.version> <spring-security.version>5.7.7</spring-security.version> <fundewebjs-starter.version>1.0.4</fundewebjs-starter.version> <fundewebjs-dependencies.version>[1.0.8,1.9.99]</fundewebjs-dependencies.version> <sonar.qualitygate.wait>true</sonar.qualitygate.wait> <jacoco.version>0.8.12</jacoco.version> <hibernate.version>5.6.15.Final</hibernate.version> <maven-antrun-plugin.version>3.0.0</maven-antrun-plugin.version> <maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version> <maven-clean-plugin.version>3.2.0</maven-clean-plugin.version> <maven-compiler-plugin.version>3.10.1</maven-compiler-plugin.version> <maven-dependency-plugin.version>3.3.0</maven-dependency-plugin.version> <maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version> <maven-enforcer-plugin.version>3.0.0</maven-enforcer-plugin.version> <maven-failsafe-plugin.version>2.22.2</maven-failsafe-plugin.version> <maven-help-plugin.version>3.2.0</maven-help-plugin.version> <maven-install-plugin.version>2.5.2</maven-install-plugin.version> <maven-invoker-plugin.version>3.2.2</maven-invoker-plugin.version> <maven-jar-plugin.version>3.2.2</maven-jar-plugin.version> <maven-javadoc-plugin.version>3.4.1</maven-javadoc-plugin.version> <maven-resources-plugin.version>3.2.0</maven-resources-plugin.version> <maven-shade-plugin.version>3.3.0</maven-shade-plugin.version> <maven-source-plugin.version>3.2.1</maven-source-plugin.version> <maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version> <maven-war-plugin.version>3.3.2</maven-war-plugin.version> |
En fundewebjs-starter:
| Bloque de código |
|---|
<java.version>1.8</java.version> <spring-cloud.version>2021.0.6</spring-cloud.version> <springdoc.version>1.6.13</springdoc.version> <jjwt.version>0.9.1</jjwt.version> <jdbc-driver.version>12.2.0.1.0</jdbc-driver.version> <fundewebjs-dependencies.version>[1.0.8,1.9.99]</fundewebjs-dependencies.version> |
En fundewebjs-dependencies:
| Bloque de código |
|---|
<java.version>1.8</java.version>
<fdwjs.version>${project.version}</fdwjs.version>
<spring-boot.version>2.7.12</spring-boot.version>
<spring-cloud.version>2021.0.6</spring-cloud.version>
<spring-security.version>5.2.4.RELEASE</spring-security.version>
<jjwt.version>0.9.1</jjwt.version>
<lombok.version>1.18.12</lombok.version>
<commons-io.version>2.6</commons-io.version>
<micrometer.version>1.9.8</micrometer.version>
<commons.lang3.version>3.12.0</commons.lang3.version>
<log4j2.version>2.17.2</log4j2.version>
<jul2slf4j.version>1.7.35</jul2slf4j.version>
<hibernate-validator.version>5.1.0.Final</hibernate-validator.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<encoding>UTF-8</encoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> |
De estas versiones, habrá que actualizar las siguientes:
- spring-cloud: (tenemos 2021.0.9) para spring boot 3.0.x y 3.1.x, versiones 2022.0.x. Para spring boot 3.2.x y 3.3.x, versiones 2023.0.x. Habrá que ver los cambios que requiere.
- spring-security: tenemos 5.7.7 → habrá que ir al menos a 6.0.8. Migration guide a 5.8: https://docs.spring.io/spring-security/reference/5.8/migration/index.html. Migration guide de 5.8 a 6.0: https://docs.spring.io/spring-security/reference/6.0/migration/index.html
- springdoc (springdoc-openapi-...): tenemos 1.6.13. La última versión que soporta Spring Boot 2.x y 1.x, es 1.8.0. Migrar a 2.6.0: https://springdoc.org/#migrating-from-springdoc-v1. Revisar compatibilidad con Java 21 (entiendo que se necesitará la versión compatible con Spring Boot 3.2.x).
| Info |
|---|
Pendiente de revisar todas las versiones y actualizaciones necesarias |
Revisar Deprecations
Revisar qué clases, métodos y properties han quedado deprecated.
Para las properties que se han quitado o renombrado, se puede añadir la siguiente dependencia:
| Bloque de código |
|---|
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-properties-migrator</artifactId> <scope>runtime</scope> </dependency> |
Esta imprimirá un diagnóstico al inicio y migrará temporalmente las properties en tiempo de ejecución por ti. Esto es, lo usaremos para ver el diagnóstico si tenemos properties deprecated, pero no lo utilizaremos como parche.
Formato de fechas en log
El formato por defecto de las fechas y horas de Log4j2 ha cambiado para seguir el estándar ISO-8601. Se ha incluido una T separando fecha y hora en lugar de un espacio: yyyy-MM-dd’T’HH:mm:ss.SSSXXX. Ver si esto afecta o rompe algo en nuestros logs en lagar.
Match de URLs
Antes, con una url definida como "/hola/mundo", se cogerían peticiones tanto a /hola/mundo como a /hola/mundo/. Ahora, para coger la barra final, habrá que indicarlo explícitamente, por ejemplo:
| Bloque de código | ||
|---|---|---|
| ||
@GetMapping("/hola/mundo", "/hola/mundo/") |
Esto sólo afectará en el caso de que se estén haciendo llamadas con la barra al final cuando no está definido así. Por lo tanto, hay que revisar en el portal-ui las rutas a las que se llaman, y si encontramos alguna con barra al final, comprobar cómo está definida en la api.
Actuator
En la guía de migración indica estos cambios en el actuator. Como esto no lo controlo, pongo aquí un panatallazo de lo que se indica para revisarlo más adelante.
