Hay una nueva forma de distribuir aplicaciones Spring. Spring Native le permite compilar aplicaciones Spring en imágenes nativas utilizando el compilador de imágenes nativas GraalVM. ¿Cuál es el beneficio de esto? Inicio instantáneo, rendimiento máximo instantáneo y consumo de memoria reducido, ya que las aplicaciones nativas de Spring se implementan como ejecutables de imágenes independientes y bien acopladas, sin incluir una instalación de JVM. ¿Cuál es el inconveniente? Es que el proceso de compilación de GraalVM, que intenta que la imagen sea lo más óptima posible, arroja muchas cosas. Pueden ser dependencias, recursos o partes del código. La forma de mitigar este problema es proporcionar a GraalVM un conjunto de archivos de configuración que tendrán el material adicional incluido en la imagen. Para automatizar este proceso, escriba su código con sugerencias para dirigir el complemento Spring AOT para generar esos archivos de configuración . Sin embargo, el paquete Spring Native incluye la configuración nativa de Spring que, en el verdadero espíritu de Spring Boot, lo maneja por usted. Contiene sugerencias de configuración para las clases de Spring, así que cuide el marco sin más preámbulos. Ya se han señalado algunos controladores, por ejemplo, el controlador MySQL es compatible con Spring Native con sugerencias que permiten la generación de las entradas correctas en los archivos de imagen nativos, Reflect-config.json, resource-config.json y native-image.properties @NativeHint (trigger = Driver.class, options = «–enable-all-security-services», types = @TypeHint (types = {FailoverConnectionUrl.class, FailoverDnsSrvConnectionUrl.class, // …}), recursos = {@ResourceHint (patrón = «com / mysql / cj / TlsSettings.properties»), @ResourceHint (patrones = «com.mysql.cj.LocalizedErrorMessages», isBundle = true)}) la clase pública MySqlHints implementa NativeConfiguration {} El complemento de compilación Spring AOT -in está disponible para los bots de Maven y Gradle y se invoca antes de ejecutar la aplicación y las pruebas y puede requerir una configuración IDE adicional. Las fuentes de los archivos generados están disponibles y se pueden inspeccionar si es necesario. Esa necesidad surge en las siguientes situaciones en las que
debe especificar una configuración nativa adicional: cuando se usa la serialización basada en la reflexión en una API programática como WebClient con Jackson Cuando intenta usar una función o biblioteca que aún no es compatible con Spring Native Cuando desea especificar la configuración nativa solicitud. En estas circunstancias, puede anotar clases ya anotadas con @Configuration o @SpringBootApplication con @NativeHint, o en casos bastante simples usando @TypeHint directamente (un @NativeHint es un contenedor para muchos tipos de configuración, incluido @TypeHints). Esto significa que, en la mayoría de los casos, su aplicación Spring Boot, JPA y Spring Security incluidos, se compilarán perfectamente de forma nativa, excepto si tiene algunas dependencias sofisticadas que deberá incluir usted mismo con sugerencias o modificando los archivos de configuración generados. Además de JPA y Spring Security, Spring Native también funciona con Spring Cloud para que pueda crear una función Spring Cloud en una imagen y luego implementarla tal cual en Google Cloud Run o como AWS Lambda. Aunque en Beta, Spring Native todavía es experimental, lo que significa que debe usarlo con moderación y no en el código de producción. Aún así, arranca una nueva aplicación en start.spring.io que ya incluye una opción de compilación para Native. Y hay mucho que esperar en la hoja de ruta.
Obtenga más información sobre la documentación de la hoja de ruta Artículos relacionados Netflix GraphQL para Spring Boot The Insider’s Guide to Java Web Developer Nanodegree – 2 Aprenda Java en Azure Para mantenerse informado sobre los nuevos artículos de The Programmer, suscríbase a nuestro boletín semanal, suscríbase a la fuente RSS y síganos Gorjeo, Facebook o Linkedin.
Comentarios
Haga un comentario o vea los comentarios existentes usando Disqus o envíe su comentario por correo electrónico a: [email protected]