Java-Framework: Native Spring-Anwendungen laufen ohne die JVM

Die Beta von Spring Native kompiliert Spring-Applikationen in Java oder Kotlin über GraalVM als eigenständige Executables.

In Pocket speichern vorlesen Druckansicht 33 Kommentare lesen

(Bild: LilKar/Shutterstock.com)

Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

VMware hat mit Spring Native ein Open-Source-Projekt gestartet, um Spring-Anwendungen zu erstellen, die unabhängig von der klassischen Java Virtual Machine laufen. Als Grundlage dient die GraalVM, die native Images erstellt. Diese lassen sich als eigenständige Executables verteilen, da sie alle benötigten Klassen und Libraries mitbringen.

Laut dem Readme-Datei im GitHub-Repository sollen sich Spring-Boot-Anwendungen nahezu unverändert als Spring-Native-Anwendungen umsetzen lassen. Das Projekt hat derzeit Beta-Status und ist unter spring-projects-experimental einsortiert, um anzuzeigen, dass es experimentell und noch nicht reif für den produktiven Einsatz ist. Bis zum Release von Version 1.0 dürften sich die APIs laut dem Readme noch verändern.

Oracle hatte die virtuelle Maschine GraalVM 2018 vorgestellt hat. Sie zielt besonders auf hohe Performance. Spring Native setzt auf Version 20.1, auch wenn GraalVM 21.0 das aktuelle Release ist.

GraalVM bietet native Images als Alternative zur Ausführung von Bytecode in der klassischen JVM: Ein Ahead-of-Time-Compiler (AOT) erstellt eigenständig ausführbare Dateien, die neben den übersetzen Klassen der eigentlichen Anwendung die Klassen der Runtime Library und der Dependencies sowie aus dem JDK statisch verlinkten Code enthalten.

Java-Praxis vertiefen

Heise veranstaltet im März 2021 drei Java-Workshops:

Die nativen Images starten schneller als reguläre JVM-Anwendungen. Der Spring-Blog spricht von einer typischen Startzeit unter 100 Millisekunden. Außerdem benötigen sie weniger Speicher. Als Nachteile schlagen im Vergleich zu Bytecode, der auf der JVM läuft, ein längerer Build-Prozess und weniger Optionen zur Runtime-Optimierung zu Buche.

Das Demo-Container-Image, das neben der Anwendung Spring Boot, Sping MVC, Jackson, Tomcat und das JDK enthält, kommt mit 50 MByte auf.

(Bild: Pivotal)

Spring Native lässt sich sowohl für Java- als auch für Kotlin-Code verwenden. Als Einsatzfelder nennt das Spring-Team unter anderem Serverless-Anwendungen mit Spring Cloud Function. Außerdem zielt Spring Native auf Applikationen in Kubernetes oder als Spring-Microservices.

Das Projekt besteht aus diversen Modulen, darunter spring-native mit den Runtime-Dependencies und spring-native-configuration mit Konfigurationshinweisen für Spring-Klassen inklusive automatischer Einstellungen für Spring Boot. spring-aot enthält die allgemeinen AOT-Transformationen, zu denen zusätzlich die beiden Module spring-aot-gradle-plugin und spring-aot-maven-plugin spezifische Transformationen für Gradle beziehungsweise Maven bieten.

Für den Einstieg existiert ein Tutorial zum Erstellen von Microservices auf Knative mit Spring Native. Einige Beispiele finden sich als Modul samples im GitHub-Repository. Eine umfangreiche Anleitung findet sich auf der Dokumentationsseite.

Weitere Details unter anderem über das Entstehen und die Beteiligten des Projekts gibt es im Spring-Blog. Der Sourcecode steht auf GitHub.

(rme)