Learn Microservices Book: Spring Boot 2.4 Upgrade Guide
Step-by-step migration guide from Spring Boot 2.3 to Spring Boot 2.4 for the Learn Microservices with Spring Boot book's microservice architecture project
El capítulo extra para la actualización del código fuente del libro desde Spring Boot 2.6 a 2.7 con correcciones de la base de datos H2 y mejoras de configuración
Complete 4-part guide series
Step-by-step migration guide from Spring Boot 2.3 to Spring Boot 2.4 for the Learn Microservices with Spring Boot book's microservice architecture project
An extra chapter showing how to update the book's source code from Spring Boot 2.4 to 2.5.5 and Java 17
The extra chapter for the book's source code update from Spring Boot 2.5 to 2.6 and from Spring Cloud 2020 to 2021.0
The extra chapter for the book's source code update from Spring Boot 2.6 to 2.7 with H2 database fixes and configuration improvements
¡Un nuevo capítulo de actualización! Este cubre los cambios requeridos en el código fuente del libro Learn Microservices with Spring Boot para actualizarlo a Spring Boot 2.7.1 y algunos extras.
Las actualizaciones fluidas no podían durar demasiado tiempo. Esta actualización rompe las fuentes de código del libro nuevamente, pero nada que no se pueda arreglar con algunos cambios menores.
Este lanzamiento de las fuentes del libro también prepara el camino para la próxima actualización mayor de Spring Boot 3.x.
En resumen, estos son los cambios cubiertos en este capítulo:
Acerca de esta guía: Este es un enfoque práctico para migrar un proyecto de Spring Boot desde la versión 2.6 a la versión 2.7. Utiliza la base de código del ejemplo práctico del libro Learn Microservices with Spring Boot, pero se aplica a otros proyectos también. Si quieres profundizar en cómo funciona Spring Boot y configurar una arquitectura de microservicios completa, consigue una copia ahora.
Tomaremos como línea base los últimos cambios para actualizar los proyectos a Spring Boot 2.6. El nuevo código fuente está disponible en GitHub (mientras estás ahí, ¡dale una estrella!).
Spring Boot 2.7 trae una actualización mayor de la base de datos que usamos en el código del libro desde 1.x a 2.x. Muchos cambios en esta versión mayor son incompatibles hacia atrás y dos de ellos impactan nuestro código (rompiéndolo). Ver esta sección en las notas de lanzamiento de Spring Boot 2.7 para más detalles.
En el libro, usamos la característica “Auto Server” de H2 para crear automáticamente un servidor de base de datos al iniciar una instancia de microservicio. El objetivo principal era mantener la base de datos simple usando solo archivos que puedan compartirse entre instancias de microservicios. Con esta característica, múltiples réplicas de microservicios pueden conectarse al mismo archivo de base de datos en lugar de tener almacenes de datos independientes, lo que no encajaría en una arquitectura de microservicios.
Combinado con esa característica, establecimos el flag DB_CLOSE_ON_EXIT=FALSE. Tenía la intención de evitar que detener un microservicio causara que el servidor de base de datos se cayera. Pero malinterpreté los documentos porque no es así como funciona. Este flag solo es útil cuando la aplicación necesita hacer algo con la base de datos en su propio hook de apagado.
El nuevo lanzamiento mayor no permite el uso de estos dos flags juntos porque eso puede causar problemas de incompatibilidad. Ver este comentario para más detalles.
Podemos resolver esto muy rápidamente: simplemente eliminando el parámetro DB_CLOSE_ON_EXIT de la URL de conexión.
spring.datasource.url=jdbc:h2:file:~/gamification;AUTO_SERVER=TRUE;
Si intentas iniciar el microservicio multiplication después de la actualización en un nuevo espacio de trabajo, obtendrás un error como el siguiente:
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "create table [*]user (id bigint not null, alias varchar(255), primary key (id))"; expected "identifier"; SQL statement: [...]
La descripción del error puede no ayudar mucho, pero la causa raíz es que el nombre de nuestra tabla es user y esto ahora es una palabra clave de sintaxis. Debemos escaparla, cambiar el nombre de la tabla o configurar H2 para evitar considerar esto una palabra clave. Para mantenerlo simple, optaremos por esta última opción que requiere solo un cambio en la URL de la base de datos en application.properties. Usamos el parámetro NON_KEYWORDS en H2 para lograr esto.
spring.datasource.url=jdbc:h2:file:~/multiplication;AUTO_SERVER=TRUE;NON_KEYWORDS=USER;
Además de las actualizaciones obligatorias para hacer que el código funcione con 2.7, también cambié al nuevo enfoque de configuración introducido por Spring Boot 2.4.x. Es bueno hacer esto en preparación para el lanzamiento de Spring Boot 3.x, que dejará de funcionar con el enfoque antiguo.
Los cambios requeridos para pasar al nuevo enfoque de configuración incluyen eliminar el starter de bootstrap heredado y migrar propiedades desde archivos bootstrap a archivos de propiedades de aplicación.
¡Eso es todo! Un par de correcciones obligatorias con esta actualización, ambas causadas por la actualización mayor de H2, y algo de contenido bonus que puedes usar para mantenerte actualizado con los cambios de Spring Boot. Además de eso, ahora tenemos la opción de usar un servidor de base de datos H2, lo que hace que toda la configuración sea aún más similar a una arquitectura de microservicios lista para producción real.
Si aún no tienes el libro, te recomiendo encarecidamente que consigas tu copia ahora. Sigo actualizando el código fuente del libro y compartiré más contenido alrededor del mismo caso de uso.
Código Fuente: El código fuente del libro con todas las actualizaciones está disponible en GitHub: U.2.7. Mientras estás ahí, ¡por favor dale una estrella!
Complete 4-part guide series
Step-by-step migration guide from Spring Boot 2.3 to Spring Boot 2.4 for the Learn Microservices with Spring Boot book's microservice architecture project
An extra chapter showing how to update the book's source code from Spring Boot 2.4 to 2.5.5 and Java 17
The extra chapter for the book's source code update from Spring Boot 2.5 to 2.6 and from Spring Cloud 2020 to 2021.0
The extra chapter for the book's source code update from Spring Boot 2.6 to 2.7 with H2 database fixes and configuration improvements
Join hundreds of software architects and engineers getting practical insights delivered to their inbox.