Die Übersetzung des Artikels wurde speziell für Studenten des Kurses "Developer on the Spring Framework" erstellt .
Am 16. Oktober 2019 wurde Spring Boot 2.2 veröffentlicht! 
In diesem Beitrag erfahren Sie mehr über die vielen neuen Extras, die Ihnen Version 2.2 bietet. 
Maven
So starten Sie mit Spring Boot 2.2. Aktualisieren Sie in Ihrer Anwendung auf die neue Version von 
starter-parent .
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>your-very-cool-project</artifactId> <version>0.0.1-SNAPSHOT</version> <name>your-very-cool-project</name> <description>Spring Boot 2.2 Project</description> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> </project> 
Wenn Sie die Anwendung von Grund auf neu 
starten , erstellen Sie ein 
Maven- oder Grade-Projekt unter 
start.spring.io !

Globale Lazy Bean-Initialisierung
Die verzögerte Initialisierung von Bean-Komponenten wird im Spring Framework seit langem unterstützt.
Die träge initialisierte Bean weist den IoC-Container an, die Bean bei der ersten Anforderung und nicht beim Start zu instanziieren.
Die in Spring Boot 2.2 eingeführte neue Funktion unterstützt die globale 
verzögerte Initialisierung von Bean-Komponenten (diese Funktion ist standardmäßig deaktiviert).
Was passiert, wenn Sie die globale Lazy Bean-Initialisierung aktivieren?
- Die Initialisierung aller Spring Beans und ihrer Abhängigkeiten wird verzögert, bis sie benötigt werden.
Um die Startzeit der Anwendung zu verkürzen, können Sie jetzt die globale verzögerte Initialisierung von Spring Beans in den Konfigurationseigenschaften aktivieren, indem Sie Folgendes verwenden:
 spring.main.lazy.initialization=true 
oder für die yml Konfiguration:
 spring: main: lazy-initialization: true 
Gibt es irgendwelche Nachteile bei der Initialisierung von Lazy Beans? Natürlich! Es ist sehr wichtig, die Konsequenzen zu verstehen - Sie sollten die globale Initialisierung von Bean-Komponenten nicht einbeziehen, ohne über diese Lösung nachzudenken! Es sind einige Kompromisse zu beachten:
- Die Verarbeitung von HTTP-Anforderungen kann länger dauern, während eine verzögerte Initialisierung erfolgt. Nachträgliche Anfragen sind nicht betroffen.
- Fehler, die normalerweise beim Start auftreten (da Spring Beans und ihre Abhängigkeiten beim Erstellen des Anwendungskontexts erstellt werden), treten jetzt nicht sofort auf. Somit führt Ihre Anwendung beim Start nicht mehr zu offensichtlichen Abstürzen! Infolgedessen kann es sein, dass Ihr Kunde als Erster auf ein Problem stößt (Bean-Verkabelung).
Wenn Sie die verzögerte Initialisierung der Bean ( 
spring.main.lazy.initialization = false ) nicht global aktivieren möchten, können Sie die verzögerte Initialisierung für eine bestimmte Komponente mithilfe der Annotation 
@Lazy .
Andererseits ist es auch möglich, die verzögerte Initialisierung von Bean-Komponenten ( 
spring.main.lazy.initialization = true ) auf globaler Ebene zu aktivieren und die verzögerte Initialisierung für eine bestimmte Komponente explizit zu deaktivieren.
Zusammenfassen:


JMX ist standardmäßig deaktiviert
Ab Spring Boot 2.2 ist JMX standardmäßig deaktiviert. Dies hilft, die Startzeit der Anwendung zu verkürzen und zur Laufzeit keine nennenswerten Ressourcen zu verschwenden. Wenn Sie immer noch von JMX abhängig sind, können Sie es erneut aktivieren:
 spring.jmx.enabled=true 
oder:
 spring: jmx: enabled: true 
Verbesserungen für Konfigurationseigenschaften
Spring Boot 2.2 enthält einige nützliche Verbesserungen für die Konfigurationseigenschaften.
- @ConfigurationPropertiesScan-Unterstützung für- @ConfigurationProperties
- Unveränderliche Bindung @ConfigurationProperties
@ConfigurationProperties Scan- Unterstützung für @ConfigurationProperties
Spring Boot erstellt eine Bean für jede Konfigurationsklasse, die mit 
@ConfigurationProperties die beim Scannen des 
Klassenpfads gefunden wurden . Dies ist eine Alternative zur Verwendung von
- @EnableConfigurationProperties für eine Klasse, die eine Eigenschaftsklasse bindet
- Oder verwenden Sie die Annotation @Componentin der Konfigurationsklasse, um sie zu einer Bean zu machen.
@Component Sie, dass für die Konfigurationsklasse zwei Bean-Komponenten erstellt werden können, die sowohl mit 
@Component als auch mit 
@Component @ConfigurationProperties . In solchen Fällen sollte 
@Component aus Ihrer Konfigurationsklasse entfernt werden!
Unveränderliche Bindung @ConfigurationProperties
Die Verwendung der konstruktorbasierten Eigenschaftsbindung unterstützt jetzt unveränderliche Konfigurationseigenschaftsklassen. Konstruktorbasierte 
@ConfigurationProperties können durch Annotieren der 
@ConfigurationProperties Klasse oder eines ihrer Konstruktoren mit 
@ConstructorBinding ConstructorBinding 
@ConstructorBinding .
Zum Beispiel:
 package com.example.immutable.configuration.binding; import lombok.Getter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConstructorBinding; @Getter @ConfigurationProperties("stock.quote.subscription") public class ImmutableStockQuoteSubscriptionProperties { private final String endpoint; private final String apiKey; private final SubscriptionType subscriptionType; private final boolean enabled; @ConstructorBinding public ImmutableStockQuoteSubscriptionProperties(String endpoint, String apiKey, SubscriptionType subscriptionType, boolean enabled) { this.endpoint = endpoint; this.apiKey = apiKey; this.subscriptionType = subscriptionType; this.enabled = enabled; } enum SubscriptionType {  REALTIME,  DELAYED, } } 
Eigenschaften in meiner application.yml:
 stock: quote: subscription: endpoint: http: 
Weitere Informationen finden Sie in der 
Dokumentation .
Änderungen am Aktorendpunkt
Der Endpunkt 
/actuator/health hat das resultierende JSON-Format geändert, indem 
details in 
components für Elemente der ersten Ebene umbenannt wurden.
Der Aktuator-Medientyp wurde von 
application/vnd.spring-boot.actuator.v2+json in 
application/vnd.spring-boot.actuator.v3+json .
Beispiel für eine Endpunktreaktion 
/actuator/health vor Spring Boot 2.2 (Aktor V2):
 { "status": "UP", "details": { "db": { "status": "UP", "details": { "database": "HSQL Database Engine", "result": 1, "validationQuery": "SELECT COUNT(*) FROM INFORMATION_SCHEMA.SYSTEM_USERS" } }, "diskSpace": { "status": "UP", "details": { "total": 250685575168, "free": 32597131264, "threshold": 10485760 } }, "ping": { "status": "UP" } } } 
Endpunktantwort 
/actuator/health Spring Boot 2.2 (Aktor V3):
 { "status": "UP", "components": { "db": { "status": "UP", "details": { "database": "HSQL Database Engine", "result": 1, "validationQuery": "SELECT COUNT(*) FROM INFORMATION_SCHEMA.SYSTEM_USERS" } }, "diskSpace": { "status": "UP", "details": { "total": 250685575168, "free": 32605003776, "threshold": 10485760 } }, "ping": { "status": "UP" } } } 
Ihr Toolkit hängt möglicherweise vom Format des Integritätsaktors V2 ab.
Spring Boot 2.2 
application/vnd.spring-boot.actuator.v2+json ist mit der Angabe des HTTP- 
Accept Headers abwärtskompatibel: Bei V2-Medientyp 
application/vnd.spring-boot.actuator.v2+jsonSie können es selbst mit Locken machen:
curl -H "Accept: application/vnd.spring-boot.actuator.v2+json" http://localhost:8080/actuator/healthMit dieser Änderung ist es nun auch möglich, 
Leistungsindikatoren in Gruppen zu organisieren.
RSocket-Unterstützung
RSocket ist ein binäres Kommunikationsprotokoll, das zum Transport von 
Byteströmen verwendet wird. Es ermöglicht symmetrische Interaktionsmodelle durch asynchrones Messaging über einen einzelnen Kanal.
Zusammen mit dem neuen Starter für RSocket wurde eine umfangreiche Autokonfiguration hinzugefügt.
 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-rsocket</artifactId> </dependency> 
Weitere Informationen finden Sie in der Dokumentation zu 
RSocket Spring Boot .
Java-Unterstützung 13
Java 13 wurde am 17. September 2019 veröffentlicht.
Spring Framework 5.2 und Spring Boot 2.2 unterstützen jetzt Java 13.
Java LTS-Versionen 8 und 11 bleiben mit Spring Boot 2.2 kompatibel.
Kubernetes Cloud Platform Discovery
ConditionalOnCloudPlatform bestimmt jetzt, ob Ihre Spring Boot-Anwendung in Kubernetes ausgeführt wird.
 package nl.jtim.spring.boot; import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform; import org.springframework.boot.cloud.CloudPlatform; import org.springframework.stereotype.Service; @Service @ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES) public class MyVeryCoolService { } 
Banner
Spring Boot wird mit einem Standardbanner ausgeliefert, das unmittelbar nach dem Start der Anwendung in der Konsole angezeigt wird.

Dies ist eine ziemlich ausgefallene Funktion, aber Spring Boot unterstützt bereits (animierte) benutzerdefinierte Banner.
Ab Spring Boot 2.2 können Sie Ihr Banner noch schöner machen:
- ASCII-Bannerdateien können jetzt mit {AnsiColor.NNN} (wobei NNN der Farbcode ist ) ANSI 256-Farbsteuerzeichen verwenden .
- Jetzt können Sie für (animierte) Grafik-Banner die Eigenschaft spring.banner.image.bitdepthauf8. Und die Eigenschaftspring.banner.image.pixelmodeimblockfür die Verwendung von Block-ASCII-Zeichen.
Das Ergebnis sieht ungefähr so aus:

Quelle: 
https://github.com/spring-projects/spring-boot/wiki/images/animated-ascii-art-256.gifEin einfaches Beispiel für ein verbessertes animiertes Spring Boot 2.2-Banner finden Sie in 
meinem Github-Beispiel .
Migration von Java EE nach Jakarta EE
Der Befehl Spring (Boot) hat nach Möglichkeit von Java EE-Abhängigkeiten mit der Gruppen- 
javax . Äquivalente Abhängigkeiten von Jakarta EE mit der 
jakarta Gruppen-ID in Spring Boot-Startern.
Zusätzlich wurde das Abhängigkeitsmanagement für die Jakarta EE-Abhängigkeits-API zusammen mit dem vorhandenen Abhängigkeitsmanagement für die Java EE-Abhängigkeits-API hinzugefügt.
Beachten Sie, dass das Java EE-API-Abhängigkeitsmanagement in zukünftigen Versionen von Spring Boot entfernt wird. Es wird empfohlen, die Jakarta EE-API-Abhängigkeiten zu verwenden.
Änderungen der Konfigurationsschlüssel
Spring Boot 2.2 führt viele neue Konfigurationsschlüssel ein. Es gibt auch Schlüssel, die veraltet und gelöscht sind. Es gibt zu viele Änderungen, um sie alle abzudecken, aber hier sind einige wichtige:
logging.file wurde in 
logging.file.name umbenannt
logging.path wurde in 
logging.file.path umbenannt
Eine vollständige Übersicht aller Änderungen finden Sie 
im Änderungsprotokoll 
der Spring Boot 2.2-Konfiguration!Veraltet
In den Versionshinweisen finden Sie eine vollständige Liste der 
veralteten Klassen und Eigenschaften .
Einige Änderungen, die beachtet werden sollten:
- Joda- java.timezugunsten vonjava.timeveraltet
- Der Elasticsearch-Transport-Client und der Jest-Client werden zu Gunsten anderer Optionen wie RestHighLevelClient und ReactiveElasticsearchClient nicht mehr empfohlen. Weitere Informationen finden Sie in der Dokumentation .
Abhängigkeitsaktualisierungen
Spring Boot 2.2 enthält viele aktualisierte Abhängigkeiten.
Frühlingsabhängigkeits-Updates:Die wichtigsten Updates zu anderen Abhängigkeiten:Testabhängigkeits-Update:Upgrade auf Spring Boot 2.2
Seit dem 1. August 2019 hat Spring Boot 1.x 
seinen Lebenszyklus abgeschlossen . Wenn Sie noch Spring Boot 1.x-Anwendungen verwenden, ist es Zeit für ein Upgrade!
Denken Sie daran, dass Klassen, Methoden und Eigenschaften, die in Spring Boot 2.1 veraltet sind, in Spring Boot 2.2 entfernt wurden. Stellen Sie sicher, dass Sie vor dem Upgrade keine veralteten Methoden aufrufen. Lesen Sie 
die Versionshinweise für Spring Boot 2.1.
Weitere Informationen finden Sie unter folgenden Links:
Klicken Sie auf +, wenn Sie diesen Artikel hilfreich fanden!
Fragen oder Feedback?
Suche Twitter: 
@TimvanBaarsen