Spring Boot 3.0 kommt mit Native Image Support – Die Neuerungen zusammengefasst
Spring Boot hat sich als eines der wichtigsten Frameworks für die Entwicklung von Java-Anwendungen etabliert. Es wurde entwickelt, um die Erstellung von produktionsbereiten Anwendungen zu vereinfachen und bietet eine Vielzahl von Funktionen, die Entwicklern das Leben erleichtern.
(Spring Boot Logo, Quelle: https://twitter.com/springboot)
Eine neue Major Version des Frameworks wurde am 24. November 2022 veröffentlicht. In diesem Blogbeitrag werfen wir einen zusammenfassenden Blick auf die Neuerungen der Version 3.0.
Versionsupgrades
Spring Boot 3.0 wird in der Praxis in Verbindung mit zahlreichen anderen Abhängigkeiten eingesetzt. Updates zu diesen Abhängigkeiten bedeuten für eine Spring Boot 3.0 Anwendung das Umsetzen neuer Migrationsanforderungen, Berücksichtigung bei der Implementierung, aber auch eine Reihe von neuen Features.
Java
Spring Boot setzt die Version Java 17 als Minimalversion voraus. Sollte sich eine Anwendung noch in der Version Java 8 oder 11 befinden, muss die JDK erstmal aktualisiert werden, um auf die neue Spring Boot Version zu migrieren. Die Nutzung mit Java 19 wurde in dieser Version getestet und die Möglichkeit bestätigt.
GraalVM
Auch bei GraalVM wird eine Anforderung an eine minimale Version gestellt. Die Version der Laufzeitumgebung muss sich mindestens auf 22.3 befinden.
Spring Framework
Spring Boot baut auf das Spring Framework auf. Die neue Version erfordert die Spring Framework Version 6.
Spring Projekte
Im Hinblick auf Versionen bei Abhängigkeiten und Bibliotheken, die im Zusammenhang mit Spring Boot 3.0 genutzt werden, hat sich viel verändert. Im selben Release der neuen Version von Spring Boot wurden auch andere Projekte von Spring aktualisiert, darunter Spring Security 6.0, Spring Kafka 3.0 und Spring Session 3.0. Eine Liste aller neuen Versionen der Spring Projekte ist in der Release Notes zu finden.
Von Java EE zu Jakarta EE
Eine Migration von Java EE zur Jakarta EE API für alle Abhängigkeiten wurde in diesem Release umgesetzt. Wo möglich, wurden dabei Jakarta EE 10 kompatible Abhängigkeiten ausgewählt. Eine Liste zu den genutzten Jakarta Versionen ist in den Release Notes zu finden.
Third Party JARs
Auch das Upgrade der JAR-Dateien von sämtlichen Drittanbietern wurden zu diesem Zweck nicht vernachlässigt. Abhängigkeiten wie Kotlin 1.7.20, Log4j 2.18, Couchbase Client 3.4 oder ElasitcSearch Client 8.5 werden mit Spring Boot 3.0 unterstützt. Natürlich zählen dazu weitaus mehr als die Genannten. Eine von den Spring Boot-Entwicklern angefertigte Auflistung vervollständigt die Aufzählung. Sie ist in den Release Notes zu finden.
Neue Features
Folgend werden die wichtigsten neuen Features zusammengefasst, anfangend mit einem der interessantesten in dem neuen Release:
GraalVM Native Image Support (Spring Native)
Es ist nun möglich, Spring Boot 3.0-Anwendungen in GraalVM native Images zu konvertieren, was erhebliche Speicher- und Startzeitverbesserungen ermöglicht.
Log4j2-Verbesserungen
Log4j2-Support wurde mit neuen Erweiterungen aktualisiert, die eine profilabhängige Konfiguration, Environment Properties-Lookup und Log4j2-Systemproperties bieten.
Verbesserte @ConstructorBinding Detection
Bei Verwendung von konstruktorgebundenen @ConfigurationProperties ist die @ConstructorBinding-Annotation nicht mehr erforderlich, wenn die Klasse einen einzigen parametrisierten Konstruktor hat. Wenn diese mehr als einen Konstruktor hat, muss weiterhin @ConstructorBinding verwendet werden, um Spring Boot mitzuteilen, welchen Konstruktor es verwenden soll.
Micrometer-Updates
Spring Boot 3.0 unterstützt die neuen Observation APIs, die in Micrometer 1.10 eingeführt wurden. Die Tracing-Unterstützung wurde für Brave, OpenTelemetry, Zipkin und Wavefront hinzugefügt.
Prometheus-Support
Auto-Configuration für Prometheus Exemplars wurde hinzugefügt. Eine PUT-Anfrage an Prometheus Push Gateway kann beim Herunterfahren ausgeführt werden.
Elasticsearch Java Client
Auto-Configuration für den neuen Elasticsearch Java Client wurde eingeführt.
SpringBootTest mit Main Methods
Das @SpringBootTest-Annotation kann jetzt die Main-Methode jeder gefundenen @SpringBootConfiguration-Klasse verwenden, wenn sie verfügbar ist.
Zusätzlich zu diesen Änderungen gab es einige kleinere Tweaks und Verbesserungen. Zum Beispiel werden Hostnamen beim Start nicht mehr protokolliert, um Startup-Zeiten zu verbessern und der Support für Java’s SecurityManager wurde entfernt.
Zusätzliche Information
Ist man in der Situation eine bestehende Spring Boot Anwendung auf die neueste Version zu migrieren, ist das mit einem dafür vorgesehenen Migration Guide [2] möglich. Eine Alternative wäre bis zum Mai 2023 zu warten, denn für diesen Zeitraum steht die Veröffentlichung der Version 3.1 fest. [3]
Quellen:
[1] https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes
[2] https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide [3] https://spring.io/projects/spring-boot#support