Spring Boot 2: Was ist neu?

Von einem Übersetzer: Trotz der Tatsache, dass bereits ein Jahr vergangen ist, enden Fragen zu den Neuerungen, die uns den 2. Boot gegeben haben, nicht dort. Das Schreiben solcher Inhalte von Grund auf ist nicht die klügste Idee. Aus diesem Grund haben wir uns entschlossen, den Artikel zu übersetzen, der uns am prägnantesten und zugleich recht vollständig erscheint.


Die Veröffentlichung von Spring Boot 2 fand Anfang 2018 statt, und alle sind gespannt darauf, es bald in Aktion zu sehen. Diese Veröffentlichung war der Höhepunkt von 17 Monaten Arbeit und über 6.800 Commits von 215 verschiedenen Personen. Es gibt viele coole Funktionen, die es wert sind, besprochen zu werden. Lassen Sie uns also über die Neuerungen in Spring Boot 2 sprechen.


In diesem Artikel werden wir Folgendes berücksichtigen:


  • Die Geschichte von Spring Boot
  • Was ist neu im Spring Boot?
  • Spring Boot 2 Upgrade-Handbuch

Geschichte des Frühlingsstiefels


Bevor ich mich mit den Innovationen befasse, möchte ich diese Gelegenheit nutzen und ein wenig über die Geschichte von Spring Boot erzählen. In einem im August 2013 veröffentlichten Beitrag kündigte Phil Webb in seinem Blog die erste wegweisende Veröffentlichung eines Projekts namens Spring Boot an.


Spring Boot wurde entwickelt, um das Erstellen gebrauchsfertiger Anwendungen und Dienste in Spring ohne übermäßigen Aufwand zu vereinfachen. Spring Boot ist ein subjektiver Blick auf die Spring-Plattform, mit der sowohl Anfänger als auch erfahrene Benutzer von Spring alles finden, was sie brauchen. Mit Boot können Sie eigenständige Anwendungen erstellen, die als "Java-JAR" ausgeführt oder in einem traditionelleren WAR-Format verteilt werden.


Nach ungefähr 9 Monaten, im April 2014, wurde Spring Boot 1.0 veröffentlicht. Seitdem gab es viele kleinere Releases und neue nützliche Funktionen.


Spring Boot 1.1 (Juni 2014)


  • Spring-Boot-Starter-Test
  • Metriken und Gesundheitsendpunkte
  • Automatische Konfiguration von Elastic Search, Apache Solr, Spring Social und Spring Integration
  • Vorlagenunterstützung (Freemaker, Groovy und Velocity)

Spring Boot 1.2 (März 2015)


  • Servlet 3.1, Tomcat 8 & Jetty 9
  • Feder 4.1
  • @ SpringBootApplication-Annotation
  • E-Mail-Support

Spring Boot 1.3 (Dezember 2016)


  • Aktualisieren von Spring Framework auf Version 4.2
  • Aktualisieren von Spring Security auf Version 4.0
  • Entwicklertools
  • Automatische Caching-Konfiguration
  • Vollständig ausführbare JARs und Service-Support

Spring Boot 1.4 (Januar 2017)


  • Feder 4.3
  • Ruhezustand 5
  • Testen von Verbesserungen
  • Integrationsstarter
  • Unterstützung für Couchbase und Neo4J

Spring Boot 1.5 (Februar 2017)


  • Logger-Endpunkt
  • Apache Kafka Support
  • Erweiterte Mechanismen für Cloud Foundry
  • LDAP-Unterstützung
  • Aktualisierungen testen

Was ist neu im Frühling?


Was ist neu in Spring Boot 2? Wenn wir über die größte Innovation sprechen, dann ist dies ein Update des Spring Framework auf die 5. Version. Seit der Veröffentlichung von Spring Framework 5 im September 2017 haben die meisten Entwickler (wie ich) auf die Veröffentlichung von Spring Boot 2 gewartet. Spring Framework 5 verfügt über eine beträchtliche Liste neuer Funktionen, aber ich möchte nur auf einige der wichtigsten eingehen.


Was ist neu in Spring Framework 5?


Unterstützung für Java 8+ -Versionen


Wenn Sie weiterhin Anwendungen auf dem Spring Framework erstellen möchten, müssen Sie mit Java Version 8+ arbeiten. Sie haben wahrscheinlich gedacht, dass dies eine sehr wichtige Änderung für uns alle ist, aber für das Spring-Team ist es noch wichtiger. Dies ermöglichte die Aktualisierung der Quellcodebasis auf Java 8 mit all ihren neuen Funktionen wie Lambda-Ausdrücken oder Streams. Dies macht den Code nicht nur lesbarer, sondern verbessert auch die Leistung des Plattformkerns.


Java 9-Unterstützung


Wenn Sie Java 9 verwenden möchten, müssen Sie ein Upgrade auf Spring Framework 5 und auch auf Spring Boot 2 durchführen. Ich weiß, dass viele immer noch nicht die neuesten Versionen von Java in der Produktion verwenden, und dies ist eine großartige Gelegenheit, mit neuen coolen „Spielzeugen“ zu experimentieren. Bei Verwendung des Standardklassenpfads sollte alles problemlos funktionieren, aber ich habe einige Schwierigkeiten beim Wechsel zu Java 9-Modulen gelesen.


Frühling mvc


Obwohl Spring MVC in diesem Artikel nicht im Mittelpunkt der Geschichte steht, ist es erwähnenswert, dass es einige nette Upgrades gab. Ich werde nicht weiter darauf eingehen. Einzelheiten finden Sie in der Dokumentation zu Spring Framework 5 .


Frühling Webflux


Asynchrone Datenflüsse spielen eine zentrale Rolle in der Geschichte von Spring Framework 5. Dies ist eine völlig andere Art des Denkens, aber zum Glück müssen wir nicht neu lernen, wie Anwendungen auf völlig neue Weise geschrieben werden. Spring WebFlux ist ein absolut asynchrones und nicht blockierendes Framework, das von Grund auf neu erstellt wurde und es Ihnen ermöglicht, eine große Anzahl paralleler Verbindungen zu bewältigen. Obwohl dies eine Revolution im Paradigma ist, wird es nicht so schwierig sein, damit zu beginnen.


Webflux


Kotlin Support


Die Unterstützung für Kotlin wurde bereits in http://start.spring.io hinzugefügt, aber Spring Framework 5 bietet spezielle Unterstützung für diese Sprache, die nützliche Funktionen bietet. Weitere Informationen hierzu finden Sie hier .


Testen von Verbesserungen


Die größte Änderung im Testsystem ist die vollständige Unterstützung von JUnit 5 Jupiter. Ich werde später mehr darüber sprechen, aber wenn Sie eine neue Anwendung auf Spring Boot 2 starten, verwenden Sie standardmäßig immer noch JUnit 4. Der Wechsel zu JUnit 5 ist jedoch eine triviale Aufgabe.


Was ist neu in Spring Boot 2


Aktualisierungen der Drittanbieter-Bibliothek


Mit jeder neuen Version von Spring Boot hat das Spring-Team die Möglichkeit, verschiedene Abhängigkeiten zu aktualisieren.


  • Thymeleaf 3 *
  • Anlegestelle 9.4
  • Tomcat 8.5
  • Ruhezustand 5.2
  • Flyway 5
  • Gradle 4

* Thymeleaf Starter hat jetzt eine eingebaute Thymeleaf-Extras-Java8time.


Sicherheits- und reaktive Federdaten


Mit der Umstellung auf Spring WebFlux hat Spring Data die Unterstützung für Anwendungen mit asynchronen Datenströmen hinzugefügt. Cassandra, MongoDB, Couchbase und Redis unterstützen derzeit asynchrone APIs. Spring Boot hat POM-Starter für alle, was den Einstieg erleichtert.


Es besteht auch die Möglichkeit, Spring Security 5.0 in unseren reaktiven Anwendungen zu verwenden.


Aktuator


Der Spring Boot Actuator ist nichts Neues, wurde aber von Grund auf neu geschrieben. Wenn Sie noch nicht mit Actuator vertraut sind, wird Folgendes ausgeführt: Es werden automatisch Endpunkte angezeigt, um Informationen zum Status der Anwendung abzurufen. Actuator in Spring Boot 1.x wurde auf Servlets geschrieben, und mit den neuen reaktiven Ansätzen benötigte das Spring-Team eine Lösung, die sowohl den alten als auch den reaktiven Ansatz unterstützt. Darüber hinaus wurden die folgenden Änderungen am Aktuator vorgenommen:


  • Neugestaltung zur Unterstützung von Servlets und Reaktivität
  • Status und detaillierte Gesundheitsprüfung werden getrennt
  • Vereinfachtes Sicherheitsmodell
  • Umschalten auf Mikrometer (es ist wie SLF4J, nur für Metriken)
  • Verbesserte JSON-Datenstruktur
  • Ein vereinfachter Prozess zum Erstellen benutzerdefinierter Endpunkte.
  • Endpunkt
  • @WebEndpoint
  • @JmxEndpoint

Es ist wahrscheinlich, dass es aufgrund von Änderungen im Sicherheitsmodell, über die wir später sprechen werden, zu Schwierigkeiten beim Upgrade kommt. Standardmäßig ist auf alle Webendpunkte über den Pfad /actuator mit einer URL des Formulars /actuator/{id} . Der Pfad / actuator kann in den Einstellungen für management.endpoints.web.base-path geändert werden.


Es gibt einen detaillierten separaten Dokumentationsblock für die Spring Boot Actuator-Web-API-Endpunkte . Es lohnt sich, mit der Einführung in dieses Tool zu beginnen.


Gradle Plugin


Gradle hat mir immer sehr gut gefallen und ich freue mich sehr, dass das Team beschlossen hat, das Plugin für Gradle neu zu schreiben.
Mit dem Spring Boot Gradle-Plugin können Sie die Spring Boot-Unterstützung in Gradle implementieren und ausführbare JAR- oder War-Archive verpacken, Anwendungen auf Spring Boot ausführen und Abhängigkeiten über Spring Boot-Abhängigkeiten verwalten. Das Gradle-Plugin in Spring Boot erfordert Gradle Version 4.0 und höher.


Erste Schritte


Um mit dem Plugin arbeiten zu können, müssen Sie es in das Projekt hochladen.


 buildscript { repositories { maven { url 'https://repo.spring.io/libs-milestone' } } dependencies { classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.0.0.RC1' } } apply plugin: 'org.springframework.boot' 

Erstellen von ausführbaren JAR- und Kriegsarchiven


Die bootRepackage-Task wurde durch bootJar und bootWar ersetzt, um JAR- bzw. War-Dateien zu erstellen. Beide Aufgaben verfügen über mehr Funktionen als der Standardbefehl Gradle und bieten Zugriff auf alle Einstellungen und die Logik.


Abhängigkeitsmanagement


Das Spring Boot Gradle-Plugin ruft das Abhängigkeitsverwaltungs-Plugin nicht mehr automatisch ab. Stattdessen erkennt das Gradle Spring Boot-Plugin, dass das Abhängigkeitsverwaltungs-Plugin verbunden ist, und importiert die richtige Version der Stückliste. Auf diese Weise können Sie besser steuern, wo und wie das Abhängigkeitsmanagement konfiguriert ist. Für die meisten Anwendungen reicht das Hinzufügen eines Abhängigkeitsverwaltungs-Plugins aus:


 apply plugin: 'io.spring.dependency-management' 

Das Gradle-Plugin verfügt über eine eigene Dokumentation , die sehr nützliche Informationen enthält. Ich empfehle jedem, der mit Gradle arbeiten möchte, diesem Link zu folgen.


Vereinfachte Sicherheit


Eines der Hauptziele von Spring Boot 2.x war es, die Sicherheitskonfiguration zu vereinfachen und das Hinzufügen benutzerdefinierter Sicherheitseinstellungen zu vereinfachen. Standardmäßig sind alle Daten geschützt, einschließlich statischer Ressourcen und Actuator-Endpunkte. Wenn sich Spring Security im Klassenpfad befindet, fügt Spring Boot die Annotation @EnableWebSecurity , und welcher spezifische Authentifizierungsmechanismus verwendet wird, bestimmt den Mechanismus für die Inhaltsaushandlung von Spring Security.


Wenn ein Benutzer seine Sicherheitsregeln konfiguriert, funktioniert die Standard-Spring Boot-Sicherheitskonfiguration nicht mehr. Zu diesem Zeitpunkt muss der Benutzer alle Sicherheitsregeln so genau wie möglich formulieren. Dies bedeutet, dass alle Sicherheitseinstellungen an einem Ort gesammelt werden und es keine Probleme mit der Reihenfolge der Verarbeitungsbefehle mit den vorhandenen WebSecurityConfigurerAdapters .


Beispiel für individuelle Sicherheitseinstellungen:


 http .authorizeRequests() // 1 .requestMatchers(EndpointRequest.to("status", "info")) .permitAll() // 2 .requestMatchers(EndpointRequest.toAnyEndpoint()) .hasRole("ACTUATOR") // 3 .requestMatchers(StaticResourceRequest.toCommonLocations()) .permitAll() // 4 .antMatchers("/**") .hasRole("USER") .and() ... // additional configuration 

  1. /status und /info erfordern keine Autorisierung.
  2. Alle anderen Aktuatoren sind mit der Rolle ACTUATOR geschützt.
  3. Der Speicherort der gemeinsam genutzten statischen Ressourcen steht allen zur Verfügung.
  4. Alle anderen Anwendungsendpunkte sind durch die USER Rolle geschützt.

Aktorsicherheit


In Anbetracht der Tatsache, dass die Aktorendpunkte fest sind, müssen Sie Endpunkte aktivieren oder ausschließen, je nachdem, welche Sie benötigen. Hier sind die Einstellungen, die dies steuern. Sie wurden seit Release 1.x geändert.


 # ENDPOINTS WEB CONFIGURATION (WebEndpointProperties) management.endpoints.web.exposure.include=info,health # Endpoint IDs that should be included or '*' for all. management.endpoints.web.exposure.exclude= # Endpoint IDs that should be excluded. management.endpoints.web.base-path=/actuator # Base path for Web endpoints. Relative to server.servlet.context path or management.server.servlet.context-path if management.server.port is configured. management.endpoints.web.path-mapping= # Mapping between endpoint IDs and the path that should expose them. 

Wenn Sie nicht sicher sind, wie Sie diese Einstellungen konfigurieren sollen, setzen Sie ein Lesezeichen in die Dokumentation für die allgemeinen Anwendungseinstellungen .


HTTP / 2-Unterstützung


Unglaublicherweise war die Veröffentlichung der HTTP 1.1-Spezifikation bereits 1996. Ich nehme an, Sie müssen nicht daran erinnern, dass sich ein modernes Netzwerk in jeder Hinsicht unterscheidet. Wenn Sie die HTTP / 2-Unterstützung in einer Anwendung unter Spring MVC oder WebFlux implementieren möchten, verwenden Sie den folgenden Parameter.


 server.http2.enabled=true 

Die HTTP / 2-Unterstützung hängt vom ausgewählten Webserver und der ausgewählten Anwendungsumgebung ab, da dieses Protokoll in JDK8 nicht sofort unterstützt wird. Lesen Sie mehr dazu in der Dokumentation .


Konfigurationsoptionen


In Spring Boot 1.x wurde die sogenannte Relaxed-Bindung unterstützt, dh Sie konnten den Parameternamen auf viele Arten definieren (Kamel-Fall, Unterstrich, Bindestrich), und am Ende wurde der Wert derselben Eigenschaft zugewiesen.


Die entspannte Bindung funktioniert genauso und die Art und Weise, wie Sie Variablen in Ihrem Code lesen, hat sich geändert:


Daten gelesen


24. Externalisierte Konfiguration


Mit Spring Boot können Sie Ihre Konfiguration externalisieren, sodass Sie mit demselben Anwendungscode in verschiedenen ... docs.spring.io arbeiten können


Metrisch


Die benutzerdefinierte Spring Boot-Metrik wurde durch ein Mikrometer ersetzt. Es wird vom Pivotal-Team entwickelt und passt sich schnell an Pivotal-Projekte an.


Spring Boot Actuator bietet eine automatische Konfiguration für Micrometer , eine Anwendungsmetrikschnittstelle, die viele Arten der Überwachung unterstützt, darunter:



Mikrometer


Weitere Informationen zu Micrometer finden Sie unter https://micrometer.io/ .


Ein Upgrade aus diesem Grund kann für diejenigen schmerzhaft sein, die Tonnen von benutzerdefinierten Metriken protokollieren.


Quarzplaner


Spring Boot 2 unterstützt die geplante Task-Ausführungsbibliothek von Quartz, die mit dem Spring-Boot-Starter-Quarz-Starter einfach hinzugefügt werden kann. Unterstützte Arbeit am RAM und an JDBC.


 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> 

HikariCP-Verbindungspool


Der Standardverbindungspool wurde von Tomcat zu HikariCP geändert. Wenn Sie spring.datasource.type verwendet haben, damit Hikari in Ihrer Tomcat-Anwendung funktioniert, können Sie es entfernen. Wenn Sie den Tomcat-Pool weiterhin verwenden möchten, fügen Sie Ihrer Konfiguration einfach Folgendes hinzu:


 spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource 

Entwicklertools


Standardmäßig wird bei jedem Neustart der Anwendung ein Bericht über die unterschiedlichen Konfigurationen aufgezeichnet. Mit anderen Worten, der Bericht zeigt Änderungen in der automatischen Konfiguration der Anwendung an, die auftreten, wenn Sie Änderungen vornehmen, z. B. das Löschen / Hinzufügen von Beans und das Festlegen von Konfigurationsparametern.


Konfigurieren Sie den folgenden Parameter, um die Aufzeichnung dieses Berichts zu deaktivieren:


 spring.devtools.restart.log-condition-evaluation-delta=false 

Kotlin Support


Zu Beginn dieses Artikels wurde die offizielle Kotlin-Unterstützung erwähnt. Es gibt auch einen speziellen Dokumentationsblock für Kotlin .


5. Juni


Wie oben erwähnt, wird JUnit 4 in Spring Boot-Anwendungen weiterhin standardmäßig verwendet. Wenn Sie ein Upgrade auf JUnit 5 durchführen möchten, müssen Sie JUnit 4 vom Spring-Boot-Starter-Test ausschließen und die erforderlichen Abhängigkeiten hinzufügen. Sie benötigen außerdem Plugins aus der folgenden Liste.


 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>${junit-platform.version}</version> </dependency> </dependencies> </plugin> </plugins> </build> 

Spring Boot 2 Upgrade-Handbuch


Ich denke, man kann nicht über eine so offensichtliche Tatsache sprechen, dass bei einer so großen Version nur das Ändern der Versionsnummer in der Produktion nicht der beste Weg ist, ein Upgrade durchzuführen. Zunächst würde ich empfehlen, das Spring Boot 2.0-Migrationshandbuch zu lesen. Persönlich fand ich eine Lösung für die meisten meiner Probleme in einem vereinfachten Sicherheitsmodell und Parameteränderungen. Dieses Handbuch enthält einige nützliche Tipps zum Migrieren von Parameterdateien.


In Spring Boot 2.0 wurden viele Konfigurationsparameter umbenannt / gelöscht, und Entwickler müssen application.properties / application.yml aktualisieren, um diese Änderungen widerzuspiegeln. Um diese Aufgabe zu vereinfachen, hat Spring Boot ein neues spring-boot-properties-migrator Modul geliefert. Wenn es als Abhängigkeit zu Ihrem Projekt hinzugefügt wird, analysiert es nicht nur die Anwendungsumgebung und zeigt beim Start Diagnoseergebnisse an, sondern migriert auch vorübergehend Parameter zur Laufzeit. Dies ist ein notwendiger Schritt bei der Migration einer Anwendung:


 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-properties-migrator</artifactId> </dependency> 

Ich weiß nicht, was Sie darüber denken, aber ich werde definitiv anfangen, mit Spring Boot 2 herumzuspielen und daran arbeiten, den Code auf diese Version zu migrieren. Normalerweise warte ich bei jeder Hauptversion auf die Veröffentlichung der nächsten Nebenversion. Dies gilt nicht nur für Spring, sondern auch für andere Marken von Apple bis Pivotal und sogar Angry Birds!

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


All Articles