La traducción del artículo fue preparada específicamente para los estudiantes del curso "Desarrollador en el Marco de Primavera" .
¡El 16 de octubre de 2019, se lanzó Spring Boot 2.2!
En esta publicación aprenderá sobre las muchas novedades que le ofrece la versión 2.2.
Maven
Para comenzar con Spring Boot 2.2. En su aplicación, actualice a la nueva versión de
starter-parent .
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>your-very-cool-project</artifactId> <version>0.0.1-SNAPSHOT</version> <name>your-very-cool-project</name> <description>Spring Boot 2.2 Project</description> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project>
Si está iniciando la aplicación desde cero, cree un proyecto Maven o Grade en
start.spring.io !

Inicialización global de frijol perezoso
La inicialización diferida de los componentes de bean ha sido admitida durante mucho tiempo en Spring Framework.
El bean vagamente inicializado le dice al contenedor de IoC que cree una instancia del bean en la primera solicitud, y no en el inicio.
La nueva característica introducida en Spring Boot 2.2 es compatible con la
inicialización global
diferida de componentes de bean (esta característica está deshabilitada de manera predeterminada).
¿Qué sucede cuando activas la inicialización global de lazy bean?
- La inicialización de todos los beans de Spring y sus dependencias se retrasará hasta que se necesiten.
Para reducir el tiempo de inicio de la aplicación, ahora puede habilitar la inicialización diferida global de Spring Beans en las propiedades de configuración mediante:
spring.main.lazy.initialization=true
o para la configuración yml:
spring: main: lazy-initialization: true
¿Hay alguna desventaja al usar la inicialización de frijol perezoso? Por supuesto! Es muy importante comprender las consecuencias: ¡no debe incluir la inicialización global de componentes de bean sin pensar en esta solución! Hay algunas compensaciones a considerar:
- El procesamiento de solicitudes HTTP puede llevar más tiempo mientras se produce cualquier inicialización diferida. Las solicitudes posteriores no se ven afectadas.
- Las fallas que generalmente ocurren al inicio (dado que los beans Spring y sus dependencias se crean al crear el contexto de la aplicación) ahora no ocurrirán de inmediato. Por lo tanto, su aplicación ya no producirá fallas obvias al inicio. Como resultado: su cliente puede ser el primero en encontrar un problema (cableado de bean).
Si no desea habilitar la inicialización diferida del bean (
spring.main.lazy.initialization = false
) globalmente, puede considerar configurar la inicialización diferida para un componente específico utilizando la anotación
@Lazy
.
Por otro lado, también es posible habilitar la inicialización diferida de componentes de bean (
spring.main.lazy.initialization = true
) a nivel global e inhabilitar explícitamente la inicialización diferida para un componente en particular.
Resumir


JMX está deshabilitado por defecto
A partir de Spring Boot 2.2, JMX está deshabilitado de forma predeterminada. Esto ayuda a reducir el tiempo de inicio de la aplicación y no desperdicia una cantidad significativa de recursos en tiempo de ejecución. Si aún depende de JMX, puede habilitarlo nuevamente:
spring.jmx.enabled=true
o:
spring: jmx: enabled: true
Mejoras para las propiedades de configuración
Spring Boot 2.2 viene con algunas buenas mejoras para las propiedades de configuración.
- Compatibilidad de escaneo de
@ConfigurationProperties
para @ConfigurationProperties
@ConfigurationProperties
inmutable @ConfigurationProperties
Compatibilidad de escaneo de @ConfigurationProperties
para @ConfigurationProperties
Spring Boot creará un bean para cada clase de configuración anotada con
@ConfigurationProperties
encuentra al escanear el
classpath . Esta es una alternativa al uso
- @EnableConfigurationProperties para una clase que une una clase de propiedad
- o usando la anotación
@Component
en la clase de configuración para convertirla en un bean.
Tenga en cuenta que se pueden crear dos componentes de bean para la clase de configuración, anotados con
@Component
y
@ConfigurationProperties
. ¡En tales casos,
@Component
debe eliminarse de su clase de configuración!
@ConfigurationProperties
inmutable @ConfigurationProperties
El uso del enlace de propiedades basado en constructor ahora admite clases de propiedades de configuración inmutables. Los
@ConfigurationProperties
basados en constructores se pueden habilitar anotando la clase
@ConfigurationProperties
o uno de sus constructores con
@ConstructorBinding
.
Por ejemplo:
package com.example.immutable.configuration.binding; import lombok.Getter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConstructorBinding; @Getter @ConfigurationProperties("stock.quote.subscription") public class ImmutableStockQuoteSubscriptionProperties { private final String endpoint; private final String apiKey; private final SubscriptionType subscriptionType; private final boolean enabled; @ConstructorBinding public ImmutableStockQuoteSubscriptionProperties(String endpoint, String apiKey, SubscriptionType subscriptionType, boolean enabled) { this.endpoint = endpoint; this.apiKey = apiKey; this.subscriptionType = subscriptionType; this.enabled = enabled; } enum SubscriptionType { REALTIME, DELAYED, } }
propiedades en mi application.yml:
stock: quote: subscription: endpoint: http:
Consulte la
documentación para más detalles.
Cambios de punto final del actuador
El punto final
/actuator/health
cambió el formato JSON resultante al renombrar
details
a
components
para
components
de primer nivel.
El tipo de medio del actuador se cambió de:
application/vnd.spring-boot.actuator.v2+json
a
application/vnd.spring-boot.actuator.v3+json
.
Ejemplo de respuesta de punto final
/actuator/health
antes de Spring Boot 2.2 (Actuador V2):
{ "status": "UP", "details": { "db": { "status": "UP", "details": { "database": "HSQL Database Engine", "result": 1, "validationQuery": "SELECT COUNT(*) FROM INFORMATION_SCHEMA.SYSTEM_USERS" } }, "diskSpace": { "status": "UP", "details": { "total": 250685575168, "free": 32597131264, "threshold": 10485760 } }, "ping": { "status": "UP" } } }
Respuesta de punto final
/actuator/health
Spring Boot 2.2 (Actuador V3):
{ "status": "UP", "components": { "db": { "status": "UP", "details": { "database": "HSQL Database Engine", "result": 1, "validationQuery": "SELECT COUNT(*) FROM INFORMATION_SCHEMA.SYSTEM_USERS" } }, "diskSpace": { "status": "UP", "details": { "total": 250685575168, "free": 32605003776, "threshold": 10485760 } }, "ping": { "status": "UP" } } }
Su kit de herramientas puede depender del formato del actuador de salud V2.
El estado de Spring Boot 2.2 es compatible con versiones anteriores al especificar el encabezado HTTP
Accept
: con el tipo de medio V2,
application/vnd.spring-boot.actuator.v2+json
Puedes hacerlo tú mismo usando curl:
curl -H "Accept: application/vnd.spring-boot.actuator.v2+json" http://localhost:8080/actuator/health
Junto con este cambio, ahora también es posible organizar los
indicadores de desempeño en grupos .
Soporte RSocket
RSocket es un protocolo de comunicación binario utilizado para transportar flujos de bytes. Posibilita modelos de interacción simétrica a través de mensajes asíncronos a través de un solo canal.
Junto con el nuevo iniciador para RSocket, se agregó una amplia configuración automática.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-rsocket</artifactId> </dependency>
Para obtener más información, lea la documentación de
RSocket Spring Boot .
Soporte de Java 13
Java 13 fue lanzado el 17 de septiembre de 2019.
Spring Framework 5.2 y Spring Boot 2.2 ahora son compatibles con Java 13.
Las versiones Java LTS 8 y 11 seguirán siendo compatibles con Spring Boot 2.2.
Kubernetes Cloud Platform Discovery
ConditionalOnCloudPlatform
ahora determina si su aplicación Spring Boot se está ejecutando en Kubernetes.
package nl.jtim.spring.boot; import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform; import org.springframework.boot.cloud.CloudPlatform; import org.springframework.stereotype.Service; @Service @ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES) public class MyVeryCoolService { }
Pancartas
Spring Boot viene con un banner predeterminado que aparece en la consola inmediatamente después de que se inicia la aplicación.

Esta es una característica bastante geek, pero Spring Boot ya admite banners personalizados (animados).
Comenzando con Spring Boot 2.2, puede hacer que su banner sea aún más agradable:
- Los archivos de banner ASCII ahora pueden usar caracteres de control de color ANSI 256 usando {AnsiColor.NNN} (donde NNN es el código de color ).
- Ahora para banners gráficos (animados), puede establecer la propiedad
spring.banner.image.bitdepth
en 8
. Y la propiedad spring.banner.image.pixelmode
en block
para usar caracteres ASCII de bloque.
El resultado se parece a esto:

Fuente:
https://github.com/spring-projects/spring-boot/wiki/images/animated-ascii-art-256.gifPara ver un ejemplo simple de un banner Spring Boot 2.2 animado mejorado, vea
mi ejemplo de Github .
Migración de Java EE a Jakarta EE
Donde sea posible, el comando Spring (Boot) cambió de las dependencias Java EE con un identificador de grupo de
javax
. Dependencias equivalentes de Yakarta EE con ID de grupo de Yakarta en arrancadores Spring Boot.
Además, se agregó la gestión de dependencias para la API de dependencia de Jakarta EE junto con la gestión de dependencias existente para la API de dependencia de Java EE.
Tenga en cuenta que la administración de dependencias de la API Java EE se eliminará en futuras versiones de Spring Boot, y se recomienda que comience a usar las dependencias de la API Jakarta EE.
Cambios clave de configuración
Spring Boot 2.2 presenta muchas nuevas claves de configuración. También hay claves que están desactualizadas y eliminadas. Hay demasiados cambios para cubrirlos todos, pero aquí hay algunos importantes:
logging.file
cambiado de nombre a
logging.file.name
logging.path
cambiado de nombre a
logging.file.path
Para obtener una descripción completa de todos los cambios, consulte
el registro de cambios de configuración de Spring Boot 2.2.Anticuado
Consulte las notas de la versión para obtener una lista completa de las
clases y propiedades en desuso .
Algunos cambios que deben tenerse en cuenta:
- Soporte de tiempo de Joda en desuso a favor de
java.time
- El cliente de transporte Elasticsearch y el cliente Jest están en desuso en favor de otras opciones como RestHighLevelClient y ReactiveElasticsearchClient; consulte la documentación para obtener más detalles.
Actualizaciones de dependencia
Spring Boot 2.2 viene con muchas dependencias actualizadas.
Actualizaciones de dependencia de primavera:Las actualizaciones más importantes para otras dependencias:Probar actualización de dependencia:Actualización a Spring Boot 2.2
Desde el 1 de agosto de 2019, Spring Boot 1.x ha
completado su ciclo de vida . Si aún usa las aplicaciones Spring Boot 1.x, ¡es hora de actualizar!
Recuerde que las clases, métodos y propiedades que están en desuso en Spring Boot 2.1 se han eliminado en Spring Boot 2.2. Asegúrese de no llamar a métodos obsoletos antes de actualizar. Consulte
las notas de
la versión en desuso en Spring Boot 2.1.
Puede encontrar más información en los siguientes enlaces:
Haga clic en + si este artículo le resultó útil.
¿Alguna pregunta o comentario?
Buscar en Twitter:
@TimvanBaarsen