Lección 1-2: Qué se ha actualizado en Spring Boot 2.0 (Parte 1)

Spring Boot 2.0.0.RELEASE se lanzó oficialmente el 1 de marzo de 2018. Esta es la primera revisión importante de Spring Boot 1.0 cuatro años después del lanzamiento, ¡así que vale la pena prestar atención a las nuevas funciones y características! En el blog oficial de Spring Boot, aprendimos: La versión Spring Boot 2.0 ha pasado por 17 meses de desarrollo y 215 usuarios diferentes han proporcionado más de 6,800 presentaciones.

Interpretamos las tecnologías actualizadas de Spring Boot 2.0 en tres categorías:

  • La primera categoría es la actualización del entorno básico;
  • La segunda categoría, reemplazo y optimización de software predeterminado;
  • La tercera categoría es la introducción de nuevas tecnologías.

Actualización del entorno básico

JDK 8 mínimo, compatible con JDK 9, ya no es compatible con Java 6 y 7

Spring Boot 2.0 requiere Java 8 como versión mínima, y ​​muchas API existentes se han actualizado para aprovechar las características de Java 8. Por ejemplo, métodos predeterminados en interfaces, devoluciones de llamada de funciones y nuevas API como javax.time. Si está utilizando Java 7 o una versión anterior, debe actualizar su JDK antes de desarrollar aplicaciones Spring Boot 2.0.

Spring Boot 2.0 pasó la prueba y puede ejecutarse normalmente bajo JDK 9. Al mismo tiempo, Spring Boot 2.0 anunció que ya no será compatible con Java 6 y 7. Hasta donde yo sé, el entorno básico de la mayoría de las empresas de Internet en China todavía se ejecuta bajo JDK 7 o 6, así que considere actualizar El equipo de Spring Boot 2.0 debe considerar este factor.

Actualización de componentes dependientes

Spring Boot 2.0 se basa en Spring Framework 5. Esta actualización de Spring Boot también ha actualizado algunos de los componentes de terceros de los que depende, principalmente de la siguiente manera:

  • Jetty 9.4, Jetty es un contenedor de Servlet de código abierto, que proporciona un entorno de ejecución para contenido web basado en Java, como JSP y Servlet. Jetty está escrito en lenguaje Java y su API se publica como un conjunto de paquetes JAR.
  • Tomcat 8.5 y Apache Tomcat 8.5.x están diseñados para reemplazar 8.0.xy son totalmente compatibles con Java 9.
  • Flyway 5, Flyway es una herramienta de gestión de versiones de base de datos que es independiente de la aplicación, gestión y seguimiento de los cambios de la base de datos. En términos sencillos, Flyway puede administrar los scripts SQL de diferentes personas al igual que SVN administra los códigos de diferentes personas, para lograr la sincronización de la base de datos.
  • Hibernate 5.2, Hibernate es un marco ORM muy popular.
  • Gradle 3.4, el complemento Gradle de Spring Boot se ha reescrito en gran medida, con importantes mejoras.
  • Thymeleaf 3.0, Thymeleaf 3 tiene una mejora de rendimiento muy grande sobre Thymeleaf 2.

Optimización y reemplazo de software predeterminado

HikariCP

El grupo de conexiones predeterminado se ha cambiado de Tomcat a HikariCP. HikariCP es un grupo de conexiones JDBC de alto rendimiento. Hikari significa "ligero" en japonés.

HikariCP es conocido como el grupo de conexiones de bases de datos más rápido en la industria de Java. El sitio web oficial proporciona comparaciones de rendimiento de grupos de conexiones de datos como c3p0, dbcp2, tomcat, vibur y Hikari.

Con respecto a por qué el desempeño de Hikari es tan sobresaliente, el sitio web oficial brinda las siguientes instrucciones:

  • Reducción de bytecode: optimice el código hasta que el bytecode compilado sea el mínimo, de modo que la caché de la CPU pueda cargar más códigos de programa;
  • Optimice el proxy y el interceptor: reduzca el código, por ejemplo, el proxy de declaración de HikariCP solo tiene 100 líneas de código;
  • Tipo de matriz personalizada (FastStatementList) en lugar de ArrayList: evite la verificación de rango cada vez que se llame a get () y evite escanear de principio a fin al llamar a remove ();
  • Tipo de colección personalizada (ConcurrentBag): mejora la eficiencia de la lectura y escritura simultáneas;
  • Otras optimizaciones para defectos de BoneCP, como el estudio de llamadas a métodos que toman más de un intervalo de tiempo de CPU.

Seguridad

Spring Security es un proyecto de alto nivel en la comunidad Spring y el marco de seguridad recomendado oficialmente por Spring Boot. Además de la autenticación y autorización habituales, Spring Security también proporciona funciones avanzadas como ACL, LDAP, JAAS, CAS, etc. para satisfacer las necesidades de seguridad de escenarios complejos.

Es relativamente problemático integrar antes de usar Spring Boot, pero Spring Boot implementa funciones de Spring Security basadas en la configuración de Java. Spring Boot 2.0 simplifica enormemente la configuración de seguridad predeterminada y facilita la adición de seguridad personalizada.

Spring Boot 2.0 es muy fácil de usar Spring Security 5.0 para proteger aplicaciones receptivas.Cuando detecta la presencia de Spring Security, lo configura automáticamente por defecto.

OAuth 2.0

OAuth 2.0 es una continuación del protocolo OAuth, pero no es compatible con versiones anteriores de OAuth 1.0, es decir, OAuth 1.0 está completamente abolido. OAuth 2.0 se centra en la simplicidad de los desarrolladores de clientes. Ya sea a través de la interacción aprobada por la organización entre el propietario del recurso y el proveedor de servicios HTTP en nombre del usuario, o permitiendo que aplicaciones de terceros obtengan acceso en nombre del usuario.

OAuth 2.0 es un marco de autorización, o estándar de autorización, que permite a las aplicaciones o clientes de terceros obtener acceso limitado a la información de la cuenta de usuario en los servicios HTTP (como Google y GitHub). OAuth 2.0 funciona delegando la autenticación de usuario al servicio que aloja la cuenta de usuario y autorizando al cliente a acceder a la cuenta de usuario.

Spring Boot 2.0 migró el proyecto Spring Security OAuth a Spring Security. Spring Boot 2.0 ya no proporciona un paquete de dependencia separado y proporciona compatibilidad con el cliente OAuth 2.0 a través de Spring Security 5.

Micrómetro

Micrometer es una biblioteca de medidas para monitorear indicadores que le permite ajustar el código de la aplicación JVM sin depender del proveedor.

Spring Boot 2.0 mejora la integración de Micrometer y ya no proporciona su propia API de indicador. Confíe en micrometer.io para satisfacer todas las necesidades de monitoreo de aplicaciones.

Micrómetro incluye soporte para indicadores de tamaño.Cuando se combina con un sistema de monitoreo de tamaño, los indicadores de tamaño pueden acceder de manera efectiva a métricas específicas específicas y pueden profundizar dentro de su rango de tamaño.

Las métricas se pueden enviar a varios sistemas y Spring Boot 2.0 listo para usar proporciona soporte para Atlas, Datadog, Ganglia, Graphite, Influx, JMX, New Relic, Prometheus, SignalFx, StatsD y Wavefront, y también puede usar memoria simple Métrica media.

Después de la integración, proporcione indicadores JVM (incluidos CPU, memoria, subprocesos y GC), Logback, Tomcat, Spring MVC y proporcione RestTemplate.

Redis usa lechuga por defecto

Redis introduce Lettuce de forma predeterminada, reemplazando a los Jedis anteriores como método de conexión de Redis subyacente.

Lettuce es un cliente de Redis escalable y seguro para subprocesos para uso sincrónico, asincrónico y reactivo. Varios subprocesos pueden compartir la misma RedisConnection. Utiliza el excelente marco de trabajo de Netty NIO para administrar de manera eficiente múltiples conexiones y admite funciones avanzadas de Redis como Sentinel, agrupación en clústeres, canalización, reconexión automática y modelo de datos de Redis.

La mayoría de las personas usan Jedis en China, por lo que la lechuga debería estudiarse más en el futuro.

Configurar enlace de atributos

En Spring Boot 2.0, el mecanismo de enlace que usa @ConfigurationProperties ha sido rediseñado, limitando las reglas de enlace y solucionando muchas inconsistencias en Spring Boot 1.x.

La nueva API de Binder también puede utilizar directamente @ConfigurationProperties en el código. Por ejemplo, lo siguiente vincula el objeto PersonName en List:

List<PersonName> people = Binder.get(environment)
    .bind("my.property", Bindable.listOf(PersonName.class))
    .orElseThrow(IllegalStateException::new);

La fuente de configuración se puede expresar en YAML así:

my:
  property:
  - first-name: Jane
    last-name: Doe
  - first-name: John
    last-name: Doe
Soporte de convertidor

El enlace usa una nueva clase ApplicationConversionService, que proporciona algunas conversiones útiles adicionales. El más notable es el tipo de duración y la cadena delimitadora del convertidor.

El convertidor de duración permite la duración en formato ISO-8601 o en una cadena simple (como 10 m, 10 minutos). Las propiedades existentes se han cambiado para usar Duration de forma predeterminada. La anotación @DurationUnit garantiza la compatibilidad con versiones anteriores al establecer la unidad utilizada si no se especifica. Por ejemplo, las propiedades que requieren segundos en Spring Boot 1.5 ahora deben ser @DurationUnit (ChronoUnit.SECONDS) para garantizar un valor simple, por ejemplo, 10 en realidad usa un valor de 10s.

La conversión de cadenas delimitadas le permite vincular simplemente una cadena a una colección o una matriz sin tener que separar las comas. Por ejemplo, el atributo LDAP base-dn usa @Delimiter (Delimiter.NONE), por lo que el LDAP DN (que generalmente contiene una coma) no se malinterpretará.

Mejoras del actuador

Los puntos finales del actuador se han mejorado enormemente en Spring Boot 2.0. Todos los puntos finales del actuador HTTP ahora están expuestos bajo la ruta / actuator y se ha mejorado la carga útil JSON generada.

Muchos puntos finales no están expuestos de forma predeterminada ahora. Si está actualizando una aplicación existente desde Spring Boot 1.5, asegúrese de consultar la guía de migración y prestar especial atención a la propiedad management.endpoints.web.exposure.include.

Spring Boot 2.0 mejora la carga útil JSON devuelta desde muchos puntos finales.

Muchos puntos finales ahora tienen JSON que refleja con mayor precisión los datos subyacentes. Por ejemplo, el terminal / actuator / conditions (/ autoconfig en Spring Boot 1.5) ahora tiene una clave de contextos de nivel superior para agrupar los resultados en ApplicationContext.

prueba

Se han realizado algunos suplementos y ajustes a las pruebas en Spring Boot 2.0:

  • @WebFluxTest ha agregado una nueva anotación para admitir las pruebas de "corte" de las aplicaciones WebFlux.
  • Los beans Converter y GenericConverter ahora buscan automáticamente @WebMvcTest y @WebFluxTest.
  • @AutoConfigureWebTestClient se ha agregado a WebTestClient para realizar pruebas. Esta anotación se aplicará automáticamente a las pruebas de @WebFluxTest.
  • Se ha agregado una nueva utilidad de prueba ApplicationContextRunner para facilitar la prueba de su configuración automática, y hemos trasladado la mayoría de nuestras suites de prueba internas a este nuevo modelo.

otro

También hay algunos ajustes y mejoras menores:

  • @ConditionalOnBean ahora usa un AND lógico en lugar de un OR lógico al determinar si se cumplen las condiciones.
  • Las clases incondicionales ahora se incluyen en la configuración automática.
  • La aplicación Spring CLI ahora incluye encodepassword que se puede usar para crear el comando de contraseña hash compatible con Spring Security.
  • Las tareas programadas (es decir, @EnableScheduling) se pueden revisar utilizando el punto final del ejecutor de tareas programadas.
  • El terminal de manejo del registrador ahora le permite restablecer un nivel predeterminado de registro.
  • Los usuarios de Spring Session ahora pueden buscar y eliminar sesiones a través del punto final del ejecutor de sesiones.
  • Use spring-boot-starter-parent Ahora, los parámetros de aplicaciones basados ​​en Maven usan indicadores por defecto.

"Competente en Spring Boot 42" .

Introducción de nueva tecnología

Soporte HTTP / 2

HTTP / 2 es el protocolo HTTP de segunda generación. Tomcat, Undertow y Jetty son compatibles con HTTP / 2 en la selección de contenedores web de Spring Boot.

En comparación con HTTP / 1.x, HTTP / 2 ha realizado grandes cambios y optimizaciones en la transmisión subyacente:

  • HTTP / 2 usa formato binario para transmitir datos, no el formato de texto de HTTP / 1.x. El formato binario aporta más ventajas y posibilidades en el análisis de protocolos y la expansión de optimización.
  • HTTP / 2 usa HPACK para comprimir y transmitir el encabezado del mensaje, lo que puede ahorrar el tráfico de red ocupado por el encabezado del mensaje; mientras que HTTP / 1.x llevará mucha información de encabezado redundante para cada solicitud, lo que desperdicia muchos recursos de ancho de banda; la compresión del encabezado puede ser muy Una buena solución al problema.
  • La multiplexación, para decirlo sin rodeos, es que todas las solicitudes se completan simultáneamente a través de una conexión TCP. Aunque HTTP / 1.x también puede solicitar solicitudes simultáneas a través de la canalización, la respuesta entre varias solicitudes se bloqueará, por lo que la canalización no se ha utilizado ampliamente hasta ahora y HTTP / 2 ha logrado verdaderas solicitudes simultáneas. Al mismo tiempo, el flujo también admite prioridad y control de flujo.
  • Server Push: el servidor puede enviar recursos al cliente más rápido. Por ejemplo, el servidor puede enviar activamente los archivos JS y CSS al cliente sin que el cliente analice el HTML y luego envíe estas solicitudes. Cuando el cliente lo necesita, ya está en el cliente.

Servidor Netty integrado

Dado que WebFlux no depende de la API de Servlet, ahora podemos proporcionar soporte para Netty como servidor integrado por primera vez. El POM de inicio spring-boot-starter-webflux extraerá Netty 4.1 y Ractor Netty.

Nota: Solo puede utilizar Netty como servidor reactivo y no proporciona compatibilidad con la API de Servlet de bloqueo.

Soporte de Kotlin

Spring Boot 2.0 ahora incluye soporte para Kotlin 1.2.xy proporciona runApplication, una forma de ejecutar aplicaciones Spring Boot usando Kotlin. También expusimos y aprovechamos el soporte de Kotlin para otros proyectos de Spring (como Spring Framework, Spring Data y Reactor) que se han agregado a su última versión.

Soporte JOOQ

JOOQ es un conjunto de herramientas para acceder a bases de datos relacionales basadas en Java. JOOQ no solo absorbe la simplicidad y seguridad de los datos de operación de ORM tradicionales, sino que también retiene la flexibilidad del SQL nativo, es más como una capa intermedia entre ORMS y JDBC. Para los productores de código a los que les gusta escribir SQL, JOOQ puede satisfacer completamente su deseo de control, que puede ser la sensación de escribir SQL en código Java.

Soporte de cuarzo

Spring Boot 1.0 no proporciona soporte para Quartz. Varias soluciones de integración han aparecido antes. Spring Boot 2.0 proporciona el método de integración más simple.

Programación receptiva

El nombre del módulo WebFlux es spring-webflux, y el Flux en el nombre proviene de la clase Flux en Reactor. Spring WebFlux tiene un nuevo marco de trabajo web reactivo funcional sin bloqueo que se puede usar para construir servicios asincrónicos, sin bloqueo y controlados por eventos, y funciona muy bien en términos de escalabilidad.

El beneficio clave esperado del no bloqueo es la capacidad de escalar con una pequeña cantidad fija de subprocesos y menos memoria. En el lado del servidor, WebFlux admite dos modelos de programación diferentes:

  • El @Controller basado en anotaciones y otras anotaciones también son compatibles con Spring MVC;
  • Enrutamiento y procesamiento funcional, estilo Java 8 Lambda.

De forma predeterminada, Spring Boot 2.0 usa Netty WebFlux, porque Netty se usa ampliamente en el espacio asincrónico sin bloqueo.Las conexiones asincrónicas sin bloqueo pueden ahorrar más recursos y proporcionar una mayor capacidad de respuesta. Al comparar la E / S sin bloqueo de Servlet 3.1, no hay mucho uso, porque el costo de usarlo es relativamente alto, Spring WebFlux abre una vía práctica.

Utilice Spring WebFlux / WebFlux.fn para proporcionar soporte de programación web reactiva WebFlux es un nuevo marco de trabajo web reactivo funcional sin bloqueo que se puede usar para construir servicios asincrónicos, sin bloqueo, controlados por eventos y es muy escalable. Bueno, esta característica viene de Spring 5.0.

Spring Boot 2.0 también proporciona la configuración automática de programación reactiva, como Reactive Spring Data, Reactive Spring Security, etc.

Haga clic para obtener más información sobre "Competente en Spring Boot 42" .

Finalmente, la nueva tecnología de Spring Boot 2.0 también tiene un interesante diseño de huevo de pascua, que presentaremos en la próxima conferencia. Al mismo tiempo, explicaré en detalle algunos cambios de Spring Boot 1.0 a la API de Spring Boot 2.0, así como mis sugerencias personales sobre si actualizar Spring Boot.

Supongo que te gusta

Origin blog.csdn.net/ityouknow/article/details/108729178
Recomendado
Clasificación