Was ist neu in Spring Boot 2.2?

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 { /** * Real time stock quotes */ REALTIME, /** * Stock quotes that are delayed by 15 minutes */ DELAYED, } } 


Eigenschaften in meiner application.yml:

 stock: quote: subscription: endpoint: http://stockgeeks.io/api enabled: true apiKey: secret subscriptionType: realtime 


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.gif

Ein 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

Source: https://habr.com/ru/post/de475384/


All Articles