Explorando Spring Native Beta 0.10 – 0.11

Compartir esta publicación

Visión general

Este artículo se basa en la documentación de Spring Native 0.10.6 BETA .

? pero la versión 0.11 acaba de salir y es muy recomendable usar la v0.11 por las muchas mejoras con un nuevo motor AheadOfTime (AOT). Consulte la sección Versión 0.11 de este artículo.

Así que echemos un vistazo a las ventajas y limitaciones de esta primera versión. Te recomiendo que consultes la sección completa versión en la documentación oficial.

Ten siempre en cuenta que estamos trabajando con una versión BETA que tiene algunas limitaciones & incompatibilidades. En la documentación oficial podemos encontrar una guía de resolución de problemas para los problemas más comunes. También hay que echar un vistazo a los ejemplos & cuestiones en el proyecto github.

Requisitos previos

  • 16GB RAM (en el pc compilando a nativo)
  • Spring Boot 2.5.6
  • Java 8, Java 11, y Kotlin 1.5+
  • GraalVM versión 21.2.0

Compatibilidad con Spring-boot

  • Spring-boot starters: Comprueba todos los soportados, algunos necesitan una gestión especial de dependencias.
  • Spring Cloud 2020.0.3 starters
  • Spring data y otros (Lombok, drivers jdbc, gprc, spring-kafka, …)

Limitaciones

https://www.graalvm.org/reference-manual/native-image/Limitations/

Spring Native con BuildPacks o Native Build Tools

En este artículo seguiremos ambas guías de inicio con Buildpacks, y con Native Build Tools en la Documentación de Spring Native.

Puedes clonar el proyecto de este artículo para construirlo si quieres.  

git clone https://github.com/davidgfolchApium/spring-native-beta.git
cd spring-native-beta

Es el mismo ejemplo de rest-api utilizado en la documentación de Spring Native pero con todas las modificaciones necesarias para ambas construcciones.

  Proveedores de servicios de desarrollo de software confiables

Con Buildpacks

Nos permite construir y ejecutar con una sola línea de comandos

mvn spring-boot:build-image

Funcionó de forma inmediata, como es habitual en el ecosistema de Spring.

La primera vez tardó 30 minutos en terminar el proceso.

Puedes ir a descansar…

gAAzz9TpRzEPeyyaCLhuVUHeEBVfdC2lzg 1RGKMCztNIl94VI3ZBAjk3CtgcLGc3BgYlcetk75iSNlWdCZQcHuizCZrDJvilX5BkJJ8ERIngZbQ0myOYrB3KvAS1oPdrfK2LtID

Tened en cuenta que las próximas construcciones deberían ir a patadas porque ya tenemos algunas cosas de buildpacks/docker hechas.

9tZxhzXVAMw8Pa8Ufyb5NMJ4UcwVfnC49 RrW26ERRA79TvFq1Zu3X2wKP4C SR02H H3Phl4QHqPp8XoRBBez81iPlsktqVd2r9potzz1

Después de eso, ejecútalo:

docker run --rm -p 8080:8080 rest-service-complete:0.0.1-SNAPSHOT

zg7fLirN6mGqpTLWqmqqueUYUe9l R5QxiTgqqwsOnDibicmG3Cxy7rg7vgYLFzlq3mH2LNH6iYv1Q1uasRg0eu36N1Z3gpcpzMuQDqmMPi29KiqTv0a Rv0tpmVHahg jSI09bl

Y comprueba que funciona: http://localhost:8080/greeting debería devolver

{"id":1,"content":"Hello, World!"}

Con herramientas Native Build

Usaremos el mismo proyecto pero instalando graalvm directamente.  Necesitarás sdkman (opción recomendada) para instalar graalvm, y las extensiones nativas del jdk.

sdk install java 21.2.0.r8-grl
sdk use java 21.2.0.r8-grl
gu install native-image

Paquete de aplicación nativa:

mvn -Pnative -DskipTests package

X0SS245xLo5h3J6lBh1TfLxSrKmG DrCljEt6ynbk0XhZtinMtq6StFmzp HifkWYaILG3Lo5TzMoCQRkNTGNLk2jfypQNl2sOpAV1WyZFNMpFbTv

Ejecútalo:

./target/spring-native-beta

v3NZvxaKp57DraNuh8X nDSGrbMlPgg0ghq9ncQUazkRJ ZPIGhWPDPT2PVaWZF0q0 CH1k7KMu8JCrJ9QRcvApCtFFS0CcB xbNEpuCmpU4N1wJV2mj5X2ekJ6abtMS5ubUY Am

Y comprueba que funciona: http://localhost:8080/greeting debería devolver

{"id":1,"content":"Hello, World!"}

Spring se adelanta

Podemos configurar algunas opciones de Spring AOT para reducir la huella, algunas ya están desactivadas/activadas por defecto.

Native hints

Debemos utilizar los native hints para solucionar algunos problemas:

  • Bibliotecas no compatibles con Spring Native
  • Define cualquier reflejo que necesite tu aplicación o cualquier biblioteca (como Jackson)

El plugin AOT nativo de Spring generará todos los *.properties & *.json archivos de configuración necesarios en META-INF/native-image.

Esta configuración específica para nuestra aplicación podría establecerse como archivos de propiedades o con anotaciones (ver proyecto spring-native-configuration).

Repositorio de muestras

En este ejemplos de repositorios de fuentes podemos comprobar «el estado del arte», de varios aspectos, que cualquier aplicación nativa de Spring podría necesitar (herramientas de construcción, agentes, librerías, módulos de Spring, etc).

La aplicación web Pet Clinic integra algunos de ellos.

  Explorando las funciones de Astro

Opciones de imágenes nativas

Algunas opciones de GraalVM vienen por defecto en Spring, y otras se llaman «Opciones útiles«.  Y entre ellas destacaré la –enable-https que debemos especificar si tenemos que servir a través de este protocolo. 

Agente de rastreo

Parece ser una «gran» herramienta que ayudará a generar todos los Native Hints necesarios para nuestras nuevas aplicaciones o librerías que podríamos utilizar.

Versión 0.11

En esta nueva versión, se ha cambiado el motor AOT, consiguiendo:

  • mejor arranque & mejoras de memoria, mejoras de compatibilidad, pero menos flexibilidad en tiempo de ejecución.D8TX6iRCHR9gDC i5JVaR4r6591VEJXCqRwNIWfyvIQepsNVJ2 yqbUx5XpMfbX5LcSh BN PmVYfEerP3oGTlTyk7 xOLV03rJu1dTopdRe6HeSEb7P4KeIQzDk L78KnKLdxtR6kYdlmTFhQ 66 88uHcbE7eyWGAyR4WI8no 1kGhdb4tvG
  • un nuevo plugin de arquitectura llamado «Puntos de extensión» que permite configurar programáticamente las sugerencias de AOT.
  • Nuevo soporte de testeo AOT” con Junit5 y graalvm native-build-tools (mockito aún no es compatible).
  • Otros…

Spring ya está planeando «Soporte nativo de Spring Boot 3» que integrará esta nueva versión en los estándares.

Author

  • David Garcia Folch

    15 years as a technical/functional analyst and java backend engineer. 8 years: backend/full-stack SOLID architecture designs and POC's implementations… leading & mentoring dev teams in best practices

    Ver todas las entradas

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Suscríbete a nuestro boletín de noticias

Recibe actualizaciones de los últimos descubrimientos tecnológicos

¿Tienes un proyecto desafiante?

Podemos trabajar juntos

apiumhub software development projects barcelona
Secured By miniOrange