Spring Boot 2: ¿qué hay de nuevo?

De un traductor: a pesar de que ya ha pasado un año, las preguntas sobre las novedades que nos dio el segundo arranque no terminan ahí. Escribir ese contenido desde cero no es la idea más inteligente. Por lo tanto, decidimos traducir el artículo, que nos parece el más conciso y al mismo tiempo bastante completo.


El lanzamiento de Spring Boot 2 tuvo lugar a principios de 2018, y todos están ansiosos por verlo pronto en acción. Este lanzamiento fue la culminación de 17 meses de trabajo y más de 6,800 compromisos de 215 personas diferentes. Hay muchas características interesantes que vale la pena discutir, así que hablemos de las novedades de Spring Boot 2.


En este artículo consideraremos:


  • La historia de Spring Boot
  • ¿Qué hay de nuevo en Spring Boot?
  • Guía de actualización de Spring Boot 2

Historia de la bota de primavera


Antes de profundizar en las innovaciones, me gustaría aprovechar esta oportunidad y contar un poco sobre la historia de Spring Boot. En una publicación publicada en agosto de 2013, Phil Webb anunció el primer lanzamiento histórico de un proyecto llamado Spring Boot en su blog.


Spring Boot se creó para facilitar la creación de aplicaciones y servicios listos para usar en Spring, sin un esfuerzo excesivo. Spring Boot es una mirada subjetiva a la plataforma Spring, que permite a los principiantes y usuarios experimentados de Spring encontrar todo lo que necesitan. Con Boot, puede crear aplicaciones independientes que se ejecutan como 'java-jar' o distribuidas en un formato WAR más tradicional.


Después de aproximadamente 9 meses, en abril de 2014, se lanzó Spring Boot 1.0. Desde entonces, ha habido muchos lanzamientos menores y nuevas funciones útiles.


Spring Boot 1.1 (junio de 2014)


  • prueba de arranque de arranque de primavera
  • Métricas y puntos finales de salud
  • Configuración automática de Elastic Search, Apache Solr, Spring Social y Spring Integration
  • Soporte de plantillas (Freemaker, Groovy y Velocity)

Spring Boot 1.2 (marzo de 2015)


  • Servlet 3.1, Tomcat 8 y Jetty 9
  • Primavera 4.1
  • Anotación @SpringBootApplication
  • Soporte por correo electrónico

Spring Boot 1.3 (diciembre de 2016)


  • Actualización de Spring Framework a la versión 4.2
  • Actualización de Spring Security a la versión 4.0
  • Herramientas para desarrolladores
  • Configuración automática de almacenamiento en caché
  • JAR totalmente ejecutables y soporte de servicio

Spring Boot 1.4 (enero de 2017)


  • Primavera 4.3
  • Hibernate 5
  • Mejoras de prueba
  • Iniciador de integración
  • Soporte para Couchbase y Neo4J

Spring Boot 1.5 (febrero de 2017)


  • Punto final de registradores
  • Soporte Apache Kafka
  • Mecanismos avanzados para Cloud Foundry
  • Soporte LDAP
  • Pruebas de actualizaciones

¿Qué hay de nuevo en la primavera?


Entonces, ¿qué hay de nuevo en Spring Boot 2? Si hablamos de la mayor innovación, esta es una actualización de Spring Framework a la quinta versión. Desde que salió Spring Framework 5 en septiembre de 2017, la mayoría de los desarrolladores (como yo) han estado esperando el lanzamiento de Spring Boot 2. Spring Framework 5 tiene una lista considerable de nuevas características, pero me gustaría hablar solo de algunas de las más importantes.


Qué hay de nuevo en Spring Framework 5


Soporte de la versión Java 8+


Si continúa queriendo crear aplicaciones en Spring Framework, debe trabajar con la versión 8+ de Java. Probablemente pensaste que este es un cambio muy importante para todos nosotros, pero para el equipo de Spring es aún más importante. Esto permitió actualizar la base del código fuente a Java 8 con todas sus nuevas características, como expresiones lambda o secuencias. Esto no solo hace que el código sea más legible, sino que también mejora el rendimiento del núcleo de la plataforma.


Soporte de Java 9


Si desea usar Java 9, necesita actualizar a Spring Framework 5 y también a Spring Boot 2. Sé que muchos todavía no usan las últimas versiones de Java en producción, y esta es una gran oportunidad para experimentar con nuevos "juguetes" geniales. Todo debería funcionar sin problemas al usar el classpath estándar, pero leí sobre algunas dificultades al cambiar a los módulos Java 9.


Mvc de primavera


Aunque Spring MVC no está en el centro de la historia en este artículo, vale la pena decir que hubo varias actualizaciones agradables. No me detendré en ellos; para más detalles, consulte la documentación de Spring Framework 5 .


Spring webflux


Los flujos de datos asincrónicos son centrales en la historia de Spring Framework 5. Este es un tipo de pensamiento completamente diferente, pero, afortunadamente para nosotros, no hay necesidad de volver a aprender cómo escribir aplicaciones de una manera completamente nueva. Spring WebFlux es un marco absolutamente asíncrono y sin bloqueo, creado desde cero, que le permite hacer frente a una gran cantidad de conexiones paralelas. Aunque esta es una revolución en el paradigma, no será tan difícil comenzar.


Webflux


Soporte Kotlin


El soporte para Kotlin se agregó nuevamente en http://start.spring.io , pero Spring Framework 5 tiene soporte especializado para este lenguaje que brinda características útiles, puede leer sobre ellos aquí .


Mejoras de prueba


El mayor cambio en el sistema de prueba es el soporte completo para JUnit 5 Jupiter. Hablaré más sobre esto más adelante, pero cuando inicias una nueva aplicación en Spring Boot 2, todavía usas JUnit 4 de forma predeterminada, sin embargo, cambiar a JUnit 5 es una tarea trivial.


Qué hay de nuevo en Spring Boot 2


Actualizaciones de bibliotecas de terceros


Con cada nueva versión de Spring Boot, el equipo de Spring tiene la oportunidad de actualizar varias dependencias.


  • Thymeleaf 3 *
  • Embarcadero 9.4
  • Tomcat 8.5
  • Hibernate 5.2
  • Flyway 5
  • Gradle 4

* El iniciador Thymeleaf ahora tiene un thymeleaf-extras-java8time incorporado.


Seguridad y datos reactivos de primavera


Con el cambio a Spring WebFlux, Spring Data ha agregado soporte para aplicaciones con flujos de datos asincrónicos. Cassandra, MongoDB, Couchbase y Redis actualmente tienen soporte API asíncrono. Spring Boot tiene iniciadores POM para todos ellos, lo que facilita comenzar.


También existe la oportunidad de usar Spring Security 5.0 en nuestras aplicaciones reactivas.


Actuador


El Spring Boot Actuator no es nada nuevo, pero ha sido reescrito desde cero. Si aún no está familiarizado con Actuator, esto es lo que hace: muestra automáticamente los puntos finales para obtener información sobre el estado de la aplicación. El actuador en Spring Boot 1.x se escribió sobre los servlets, y con los nuevos enfoques reactivos, el equipo de Spring necesitaba una solución que admitiera los enfoques antiguos y reactivos. Además, se han realizado los siguientes cambios en Actuator:


  • Rediseño para soportar servlets y reactividad
  • El estado y el control de salud detallado se separan
  • Modelo de seguridad simplificado
  • Cambiar a micrómetro (es como SLF4J, solo para métricas)
  • Estructura de datos JSON mejorada
  • Un proceso simplificado para crear puntos finales personalizados.
  • Punto final
  • @WebEndpoint
  • @JmxEndpoint

Es probable que haya dificultades en la actualización debido a cambios en el modelo de seguridad, de lo que hablaremos más adelante. De forma predeterminada, se puede acceder a todos los puntos finales web a través de la ruta /actuator con una URL del formulario /actuator/{id} . La ruta / actuator se puede cambiar en la configuración management.endpoints.web.base-path .


Hay un bloque de documentación detallado por separado para los puntos finales de la API web de Spring Boot Actuator , vale la pena comenzar la introducción de esta herramienta.


Gradle Plugin


Siempre me ha gustado mucho Gradle, y estoy encantado de que el equipo haya decidido reescribir el complemento para Gradle.
El complemento Spring Boot Gradle le permite implementar el soporte Spring Boot en Gradle y le permite empaquetar archivos ejecutables jar o war, ejecutar aplicaciones en Spring Boot y administrar dependencias a través de las dependencias spring-boot. El complemento Gradle en Spring Boot requiere Gradle versión 4.0 y posterior.


Empezando


Para comenzar a trabajar con el complemento, debe cargarlo en el proyecto.


 buildscript { repositories { maven { url 'https://repo.spring.io/libs-milestone' } } dependencies { classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.0.0.RC1' } } apply plugin: 'org.springframework.boot' 

Crear archivos ejecutables jar y war


La tarea bootRepackage ha sido reemplazada por bootJar y bootWar para crear archivos jar y war, respectivamente. Ambas tareas tienen más funcionalidad que el comando similar estándar de Gradle, que proporciona acceso a todas las configuraciones y la lógica.


Gestión de dependencias


El complemento Spring Boot Gradle ya no extrae automáticamente el complemento de administración de dependencias. En cambio, el complemento Gradle Spring Boot ve que el complemento de administración de dependencias está conectado e importa la versión correcta de la lista de materiales. Esto le permite controlar mejor dónde y cómo se configura la administración de dependencias. Para la mayoría de las aplicaciones, agregar un complemento de administración de dependencias es suficiente:


 apply plugin: 'io.spring.dependency-management' 

El complemento Gradle tiene su propia documentación , que contiene información muy útil. Recomiendo que cualquiera que quiera comenzar a trabajar con Gradle siga este enlace.


Seguridad simplificada


Uno de los objetivos principales de Spring Boot 2.x era simplificar la configuración de seguridad y facilitar la adición de configuraciones de seguridad personalizadas. Por defecto, todos los datos están protegidos, incluidos los recursos estáticos y los puntos finales del actuador. Si Spring Security está en el classpath, Spring Boot agregará la anotación @EnableWebSecurity , y qué mecanismo de autenticación específico se utilizará determinará el mecanismo de negociación de contenido de Spring Security.


Cuando un usuario configura sus reglas de seguridad, la configuración de seguridad estándar de Spring Boot dejará de funcionar. En este punto, el usuario deberá deletrear todas las reglas de seguridad con la mayor precisión posible. Esto significa que todas las configuraciones de seguridad se recopilan en un solo lugar y no hay problemas con el orden de procesamiento de los comandos con los WebSecurityConfigurerAdapters existentes.


Ejemplo de configuraciones de seguridad individuales:


 http .authorizeRequests() // 1 .requestMatchers(EndpointRequest.to("status", "info")) .permitAll() // 2 .requestMatchers(EndpointRequest.toAnyEndpoint()) .hasRole("ACTUATOR") // 3 .requestMatchers(StaticResourceRequest.toCommonLocations()) .permitAll() // 4 .antMatchers("/**") .hasRole("USER") .and() ... // additional configuration 

  1. /status y /info no requieren autorización.
  2. Todos los demás actuadores están protegidos con la función ACTUATOR .
  3. La ubicación de los recursos estáticos compartidos está disponible para todos.
  4. Todos los demás puntos finales de la aplicación están protegidos por el rol de USER .

Seguridad del actuador


Teniendo en cuenta que los puntos finales del actuador son fijos, debe habilitar o excluir los puntos finales, según cuáles necesite. Aquí están las configuraciones que controlan esto, han cambiado desde la versión 1.x.


 # ENDPOINTS WEB CONFIGURATION (WebEndpointProperties) management.endpoints.web.exposure.include=info,health # Endpoint IDs that should be included or '*' for all. management.endpoints.web.exposure.exclude= # Endpoint IDs that should be excluded. management.endpoints.web.base-path=/actuator # Base path for Web endpoints. Relative to server.servlet.context path or management.server.servlet.context-path if management.server.port is configured. management.endpoints.web.path-mapping= # Mapping between endpoint IDs and the path that should expose them. 

Si no está seguro de cómo configurar estas configuraciones, marque la documentación para la configuración general de la aplicación .


Soporte HTTP / 2


Increíblemente, el lanzamiento de la especificación HTTP 1.1 ya fue en 1996. Supongo que no necesita recordar que una red moderna difiere en todos los aspectos. Si desea implementar el soporte HTTP / 2 en una aplicación en Spring MVC o WebFlux, use el siguiente parámetro.


 server.http2.enabled=true 

La compatibilidad con HTTP / 2 depende del servidor web seleccionado y del entorno de la aplicación, ya que este protocolo no es compatible con JDK8 de fábrica. Lea más sobre esto en la documentación .


Opciones de configuración


En Spring Boot 1.x, se apoyó el llamado enlace relajado, en otras palabras, se podía definir el nombre del parámetro de muchas maneras (caso de camello, guión bajo, guión), y al final, el valor se asignó a la misma propiedad.


El enlace relajado funciona de la misma manera, y la forma en que lee las variables en su código ha cambiado:


Datos leídos


24. Configuración externalizada


Spring Boot le permite externalizar su configuración para que pueda trabajar con el mismo código de aplicación en diferentes ... docs.spring.io


Métrica


La métrica personalizada Spring Boot ha sido reemplazada por Micrómetro. Es desarrollado por el equipo de Pivotal y se adapta rápidamente a los proyectos de Pivotal.


Spring Boot Actuator proporciona configuración automática para Micrometer , una interfaz métrica de aplicación que admite muchos tipos de monitoreo, que incluyen:



Micrómetro


Más información sobre Micrometer en https://micrometer.io/ .


Una actualización debido a esto puede ser dolorosa para aquellos que registran toneladas de métricas personalizadas.


Planificador de cuarzo


Spring Boot 2 tiene soporte para la biblioteca de ejecución de tareas programadas Quartz, que es fácil de agregar usando spring-boot-starter-quartz starter. Trabajo soportado en RAM y en JDBC.


 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> 

Pool de conexiones HikariCP


El grupo de conexiones estándar ha cambiado de Tomcat a HikariCP. Si usó spring.datasource.type para que Hikari funcione en su aplicación Tomcat, puede eliminarlo. Del mismo modo, si desea continuar usando el grupo Tomcat, simplemente agregue lo siguiente a su configuración:


 spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource 

Herramientas para desarrolladores


Por defecto, cada vez que se reinicia la aplicación, se registra un informe sobre la diferencia en las configuraciones. En otras palabras, el informe muestra los cambios en la configuración automática de la aplicación que se producen a medida que realiza cambios, como eliminar / agregar beans y establecer parámetros de configuración.


Para deshabilitar la grabación de este informe, configure el siguiente parámetro:


 spring.devtools.restart.log-condition-evaluation-delta=false 

Soporte Kotlin


Anteriormente en este artículo, se mencionó el soporte oficial de Kotlin. También hay un bloque especializado de documentación para Kotlin .


5 de junio


Como se mencionó anteriormente, JUnit 4 todavía se usa de forma predeterminada en las aplicaciones Spring Boot. Si desea actualizar a JUnit 5, debe excluir JUnit 4 de spring-boot-starter-test y agregar las dependencias necesarias. También necesitará complementos de la lista a continuación.


 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>${junit-platform.version}</version> </dependency> </dependencies> </plugin> </plugins> </build> 

Guía de actualización de Spring Boot 2


Creo que no se puede hablar de un hecho tan obvio que con un lanzamiento tan grande, solo cambiar el número de versión en producción no es la mejor manera de actualizar. En primer lugar, recomendaría leer la Guía de migración de Spring Boot 2.0 . Personalmente, encontré una solución a la mayoría de mis problemas en un modelo de seguridad simplificado y cambios de parámetros. Esta guía tiene algunos consejos excelentes para migrar archivos de parámetros.


En Spring Boot 2.0, muchos parámetros de configuración fueron renombrados / eliminados, y los desarrolladores necesitan actualizar application.properties / application.yml para reflejar estos cambios. Para facilitar esta tarea, Spring Boot ha entregado un nuevo módulo spring-boot-properties-migrator . Al agregarse a su proyecto como una dependencia, no solo analizará el entorno de la aplicación y mostrará los resultados de diagnóstico al inicio, sino que también migrará temporalmente los parámetros en tiempo de ejecución. Este es un paso necesario al migrar una aplicación:


 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-properties-migrator</artifactId> </dependency> 

No sé qué piensas al respecto, pero definitivamente comenzaré a jugar con Spring Boot 2 y trabajaré en migrar el código a esta versión, pero generalmente con cualquier versión principal espero la próxima versión menor. ¡Esto se aplica no solo a Spring, sino también a otras marcas, desde Apple hasta Pivotal e incluso Angry Birds!

Source: https://habr.com/ru/post/438980/


All Articles