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.
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.
Der native Graal
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.
Heise veranstaltet im März 2021 drei Java-Workshops:
- 22. März: Coole neue Java-Features - besserer Code mit Java 9 bis 16
- Best-of-Java, Hands-on: Ein Workshop zur Vorbereitung auf das bevorstehende Release von Java 16 und das kommende Long-term-Release Java 17. Trainer: Michael Inden
- 23. März: JUnit 5: Testing reloaded. Wie das Schreiben von Unit-Tests wieder Spaß macht
- Fundierter Einstieg in das wohl populärste Unit-Testing-Framework für Java. Passende und wartbare Tests mit JUnit 5 erstellen, parametrisierte Tests und Praxistauglichkeit. Trainer: Michael Inden
- 24. März: GraphQL für Java-Anwendungen
- Effizient Daten austauschen mit der Abfragesprache GraphQL: ein Workshop zu Grundlagen und Konzepten. Trainer: Nils Hartmann
Schnellstart und Optimierungen
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.
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.
Einstiegshilfe und Beispiele
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)