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.
@ConfigurationProperties
Scan-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
@Component
in 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+json
Sie können es selbst mit Locken machen:
curl -H "Accept: application/vnd.spring-boot.actuator.v2+json" http://localhost:8080/actuator/health
Mit 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.bitdepth
auf 8
. Und die Eigenschaft spring.banner.image.pixelmode
im block
fü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.time
zugunsten von java.time
veraltet - 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