Suche
Die Stiefel zweimal fest geschnürt

Spring Boot 2 – eine Einführung: All die „kleinen“ Updates und Verbesserungen

Michael Simons

© Shutterstock.com / Igor Bukhlin

 

Upgrades auf die aktuellsten Versionen unterstützter Bibliotheken und Werkzeuge, Neuerungen durch und mit Spring Framework 5 und Änderungen im Kern von Spring Boot. Das zweite Major-Release von Spring Boot lässt kaum einen Stein auf dem anderen. Im letzten Teil dieser Serie wird der Fokus auf einige „kleinere“ Änderungen und Verbesserungen in Spring Boot 2 gelegt.

Michael Simons ist Speaker auf der JAX 2018 und Autor des Buches „Spring Boot – Moderne Softwareentwicklung im Spring Ökosystem“, das beim dpunkt.verlag erschienen ist.

Java 8 baseline und Support von Java 9+

Spring Boot 2 basiert auf dem Spring Framework 5 und setzt damit Java 8 zwingend voraus. Im Umkehrschluss bedeutet dies, dass Spring Boot 2 nicht mehr auf Java 7 oder noch älteren Versionen der Programmiersprache betrieben werden kann. Das Spring Framework 5 selbst ist vollständig mit dem Java Development Kit 9 (JDK 9) kompatibel, sowohl zur Entwicklungszeit als auch hinsichtlich des Deployments und funktioniert auf dem Klassen- sowie auf dem Modulpfad.

Und Jakarta EE / Java EE?

Durch Spring Framework 5 wird das Java EE 7 API zwingend vorgegeben und das Java EE 8 API zur Laufzeit unterstützt. Das bedeutet: Es werden mindestens die Versionen Tomcat 8.5, Jetty 9.4 oder WildFly 10 vorausgesetzt. Unterstützt werden zudem Servlet 4, Validation 2.0, JPA 2.2 und JSON Binding 1.0, dies wurde bereits ausgiebig getestet.

Spring Framework 5

Mit dem Upgrade auf Spring Framework 5 werden etliche als „deprecated“ markierte Klassen und Features entfernt. Dazu gehören Hibernate 3 und 5, Tiles 3, Portlet, Velocity, JasperReports, XMLBeans, JDO und insbesondere auch Guava. Ist Ihre Anwendung auf eines oder mehrere dieser Features angewiesen, bleiben Sie bei dem Spring Boot 1.5.x-Release-Zyklus. Das Spring Framework 5 bringt auch Neues: Schnittstellen sind durchgängig mit Nullable oder NotNullable annotiert, der Core-Container unterstützt funktionale Bean-Registrierung (die 4. Möglichkeit, Komponenten aufzubauen nach XML, Annotationen und der expliziten Java-Config).

Aktualisiertes Web MVC und komplett neues WebFlux

Das neue WebFlux-Modul habe ich ausführlich vorgestellt, aber der Web MVC wurde ebenfalls aktualisiert: Er unterstützt die Servlet-4.0-Spezifikation, ist nun unabhängig vom Java Activation Framework, kann immutable Objects binden und vieles mehr.

Kotlin-Support

Das Spring Framework 5 hat First-Class-Support für Kotlin in Form einer domänenspezifischen Sprache (DSL). Diese wird zur Konfiguration des Application Context, zum Routing für WebFlux und einer Vielzahl Anpassungen zur Nutzung von Sprach-Features genutzt. Diese Features umfassen etwa reifizierte Typen, um ständiges Casten zu vermeiden.

JUnit 5

Während Spring Boot 2 standardmäßig noch JUnit 4 zum Testen nutzt, so unterstützt es über Spring Framework 5 die Plattform JUnit Jupiter vollständig und stellt SpringExtension, @SpringJUnitConfig und mehr zur Verfügung. Wer seine Kollegen ärgern möchte, kann nun @EnabledIf oder @DisabledIf auf dem CI-Server nutzen.

Erwähnenswerte weitere Aktualisierungen

Major-Updates der folgenden Abhängigkeiten wurden ebenfalls vorgenommen:

  • Thymeleaf 3 wird nicht nur unterstützt, sondern ist der Standard. Hier kann Arbeit anfallen, wenn Ihre Anwendung eigene Dialekte oder ähnliches nutzt.
  • Flyway wird nun in Version 5 genutzt.
  • Das Update auf Hibernate 5.2 wird Sie zwingen, noch mal einen Blick in Ihren Entity-Mapping-Code zu werfen.

Änderungen in Spring Boot 2

  • @ConfigurationProperties werden nur noch validiert, wenn sie als @Validated markiert sind.
  • Der Bindungsmechanismus wurde komplett neu geschrieben und kann auf triviale Art und Weise genutzt werden, wenn sie Properties sehr früh als Teil eines Starters testen und binden möchten.
  • Alle Properties, Packages und Klassen, die im Kontext eines eingebetteten Servlet-Containers genutzt wurden, wurden neu strukturiert und spiegeln jetzt den Dualismus Spring Web MVC und WebFlux wieder.
  • Es gibt einen praktischen, neuen Starter: spring-boot-starter-json. Damit werden alle Bibliotheken geladen und registriert, die Jackson benötigt, um sinnvoll Java-8-Datentypen verarbeiten zu können.
  • Spring Boot nutzt nun HikariCP als Default Pool für Datenbankverbindungen.
  • Falls Hibernate in Kombination mit einer eingebetteten Datenbank eingesetzt wird, wird spring.jpa.hibernate.ddl-auto nur noch dann auf create-drop gesetzt, wenn kein Schemamanager wie Flyway oder Liquibase im Spiel ist.
  • Eigene Starter sind von einer kleinen, aber wichtigen Änderungen betroffen: @ConditionalOnBean nutzt nun AND statt OR, um mehrere, angegebene Beans zu verknüpfen

Fazit

Eine Hello-World-Anwendung wird in der Regel sehr einfach migriert sein. Meistens aber bestehen Anwendungen in der realen Welt aus mehr als einem Endpunkt. Allein die zahlreichen Upgrades von Upstream-Bibliotheken sind im Detail mit Vorsicht zu genießen.

Es spricht überhaupt nichts dagegen, neue Services mit Spring Boot 2 aufzusetzen. Spring Boot 2 ist seit über einem Jahr in der Entwicklung und als Autor eines Buches zu diesem Thema, war das eine recht interessante Erfahrung. Eine bestehende Anwendung sollte aber nicht einfach nur durch Änderung einer Versionsnummer in der Build-Datei aktualisiert werden.

Als Lohn des Updates winken reaktive Anwendungen, moderne Plattformen und zu guter Letzt: animierte Banner (siehe Tweet). Damit weiß ich nun auch, welches Thema ich als Beispiel für eigene Starter in 2018 neu aufgreifen kann.

Spring Boot – Moderne Softwareentwicklung im Spring Ökosystem
Das Spring-Boot-Buch erscheint im Januar 2018 und wird alle aktuellen Themen rund um Spring Boot 2 beinhalten. Dazu gehören neben dem reaktiven Programmiermodell mit Spring 5 auch die neue Actuator-Infrastruktur, der Support von Micrometer.io und vieles mehr.

Dieses Buch soll interessierte Entwickler aus dem Java-EE-Bereich ebenso wie Spring-Entwickler ansprechen und ihnen ein „Rezept“ an die Hand geben, immer wiederkehrende Aufgaben aus dem fachlichen Alltag elegant und ohne Ablenkung mit Spring Boot abzuwickeln.

Weitere Informationenen zum Buch gibt es hier!

Geschrieben von
Michael Simons
Michael Simons
Michael Simons arbeitet als Senior Consultant bei innoQ Deutschland. Er ist Mitglied des NetBeans Dream Teams und Gründer der Euregio JUG. Michael schreibt auf seinem Blog über Java, Spring und Softwarearchitektur. Auf Twitter ist er unterwegs als @rotnroll666, wo er sich unter anderem mit Java, Musik und den kleineren und größeren Problemen als Ehemann und Vater von zwei Kindern beschäftigt. Im Januar 2018 wird Michaels Buch "Spring Boot -- Moderne Softwareentwicklung im Spring-Ökosystem" im dpunkt.verlag erscheinen. Das Buch ist bereits heute unter springbootbuch.de vorbestellbar. Es behandelt Spring Boot 2 und das neue, reaktive Programmierparadigma von Spring 5 ebenso wie Spring-Grundlagen und spricht damit erfahrene Spring-Entwickler wie auch Spring-Neulinge an. Die Schaubilder in diesem Artikel stammen ebenso aus dem Buch, genau wie einige der gezeigten Beispiele. Der Code ist ist bereits jetzt auf GitHub verfügbar.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.