Zieh die Stiefel an, der Frühling ist da

Spring Boot 1.5 bringt nativen Support für Apache Kafka

Dominik Mohilo

Mit der aktuellen Version von Spring Boot bringt Pivotal eine ganze Reihe von Upgrades an den Mann, aber auch einige neue Features sind in Version 1.5 des Frameworks enthalten. Dazu zählen unter anderem die native Unterstützung von Apache Kafka und Cloud Foundry sowie Spring Data Ingalls. Außerdem enthalten: zahlreiche neue Endpoints.

Die Entwicklungszeit von Spring Boot 1.5 betrug rund sechs Monate und mit dem Release hat sich die Zahl an Helfern auf über 320 und die Anzahl an Commits für das Projekt auf über 10.000 verbessert. Nach Veröffentlichung des letzten größeren Releases, Spring Boot 1.4, war noch von 280 Helfern und 8500 Commits die Rede.

Für alle, die auf das nächste Major Release warten, gibt es gute Neuigkeiten: Zieht man die GitHub-Seite des Projektes zu Rate, erfährt man, dass Spring Boot 2.0 bereits im November erscheinen soll. Einen kleinen Einblick, was für Spring Boot 2.0 geplant ist, kann man dort ebenfalls bekommen.

Wichtig: Die aktuellste Version ist tatsächlich Spring Boot 1.5.1, da es beim 1.5.0.RELEASE ein Problem nach dem Sync mit Maven Central gab. Nach dem Fix wurde die Version 1.5.1.RELEASE direkt veröffentlicht.

Was ist neu?

Apache Kafka

Eines der Kernfeatures der jüngsten Hauptversion von Spring Boot ist die native Unterstützung von Apache Kafka – durch das Projekt spring-kafka wird das Ganze möglich. Um Kafka zu nutzen ist es ausreichend, die spring-kafka-Dependency einzufügen und die entsprechenden spring.kafka.*-Anwendungseigenschaften zu konfigurieren.

Um Nachrichten von Kafka zu erhalten, braucht es nur ein paar wenige Zeilen Code:

@Component
public class MyBean {

    @KafkaListener(topics = "someTopic")
    public void processMessage(String content) {
        // ...
    }

}

Cloud Foundry Aktuator-Erweiterung

Das Spring Boot Aktuator-Modul beinhaltet ab Version 1.5 zusätzliche Unterstützung für Cloud Foundry, die aktiviert wird, wenn man auf eine kompatible Instanz deployt. Der Pfad /cloudfoundryapplication stellt dabei eine alternative und sichere Route zu allen NamedMvcEndpoint-Beans dar.

Für die Darstellung zusätzlicher Aktuator-Informationen können die Management-UIs von Cloud Foundry den Endpoint nutzen und Health-Informationen neben dem Anwendungsstatus darstellen. Weitere Informationen zum Cloud-Foundry-Endpoint gibt es in der Dokumentation

Ein Cloud-Foundry-UI nutzt den Spring-Boot-Endpoint / Quelle: Pivotal

Ein Cloud-Foundry-UI nutzt den Spring-Boot-Endpoint / Quelle: Pivotal

Weitere Änderungen

Wie oben bereits erwähnt, beinhaltet Spring Boot 1.5 auch das aktuellste Release von Spring Data mit dem Codenamen „Ingalls“. Mit dem neuen loggers-Endpoint ist es Nutzern zudem möglich, Logging-Levels von Anwendungen „on the fly“ einzusehen und zu verändern. Hierfür gibt es sowohl JMX- als auch MVC-Endpoints.

Weitere kleinere Updates umfassen einen neuen Health-Check für Cassandra, frei einstellbare fat-jar-Layouts und ein neues JmxEndpoint-Layout. Mit letzterem kann man Aktuator-Endpoints entwickeln, die lediglich via JMX exponiert werden. Auch die native Unterstützung von LDAP-Servern hat Spring Boot 1.5 an Bord, außerdem kann Mockito 2.x nun mit @MockBean genutzt werden.

Eine detailliertere und vollständige Liste mit den Neuerungen und Verbesserungen in Spring Boot 1.5 gibt es auf GitHub; in den Release Notes werden die Highlights der neuen Version besprochen.

Upgrades:

  • Spring Data Ingalls
  • Jetty 9.4
  • JooQ 3.9
  • AssertJ 2.6.0
  • Hikari 2.5
  • Neo4j 2.1

Was wird entfernt?

Die neueste Version des Frameworks stellt in Sachen Deprecations keine Ausnahme dar: auch in Spring Boot 1.5 wurden einige Dinge als „zu entfernen“ markiert. Dazu zählt etwa TomcatEmbeddedServletContainerFactory.setTldSkip, das durch setTldSkipPatterns ersetzt wurde. Auch die Unterstützung von CRaSH wird es ab dem nächsten Update nicht mehr geben, da das Projekt nicht mehr aktiv gewartet wird.

Das Caching via Guava fällt dem im März erscheinenden Update auf das Spring Framework 5 zum Opfer: Ein Upgrade auf Caffeine wird dringend empfohlen, da in Spring 5 Guava nicht mehr unterstützt wird. Zudem wird die nächste Spring-Boot-Version Apache DBCP nicht mehr supporten, stattdessen wird auf den Nachfolger DBCP 2 gesetzt.

Hintergrund

Über Spring Boot

Ziel von Spring Boot war von Anfang an die Vereinfachung des Einstiegs in die Enterprise-Java-Entwicklung. Seit etwa dreieinhalb Jahren ist die Erweiterung integraler Bestandteil in der Spring-IO-Plattform. Mit Spring Boot können Spring-Anwendungen ohne die Konfiguration von Anwendungsservern oder Servlet-Containern zum Laufen gebracht werden. Zudem wird das Dependency-Management durch die Nutzung von Spring Boot vereinfacht.

Es ist noch nicht allzu lange her, da wurde Spring Boot wegen seiner hohen Komplexität und der großen Anzahl an Abhängigkeiten von den ThoughtWorks-Experten noch mit Argwohn betrachtet. Auch wenn diese Vorbehalte spätestens seit April letzten Jahres relativiert wurden, ist die Erweiterung des Spring Frameworks durch seinen Funktionsumfang nicht immer ganz leicht zu durchschauen.

Spring Boot Experten

Wer Probleme beim Einstieg in Spring Boot hat, für den gibt es auf JAXenter Abhilfe: In seinem Einführungsartikel zu Spring Boot stellt W-JAX-Speaker Eberhard Wolff die Spring-Erweiterung vor und zeigt, wie man damit durchstarten kann. Zur Veröffentlichung von Spring Boot 1.0 hat Spring-Experte Oliver Gierke die drei Kernelemente von Spring Boot wie folgt zusammengefasst:

1. Dependency Management
Mit reinem Maven/Gradle bleibt es dem Entwickler immer noch selbst überlassen, sich die entsprechenden Bibliotheken in den richtigen Versionen zusammenzusuchen. Die Starter-poms aus Spring Boot helfen hier und sind trotzdem flexibel genug, um bei Bedarf doch einmal eine einzelne Version abzuändern.

2. Konfigurationsdefaulting
Nehmen wir an, man will eine Webanwendung auf Basis von Thymeleaf, Spring MVC und Spring Data JPA mit Hibernate bauen. Über den Mechanismus in 1. bekommt man hier sehr schnell die Dependencies in passenden Versionen zusammen. Was man jetzt aber immer noch tun muss, ist ein Default Setup: DataSource konfigurieren, EntityManager konfigurieren, Spring Data aktivieren, SpringMVC Setup (ViewResolver für Thymeleaf), etc. Die Idee von Boot ist jetzt, in Abhängigkeit (vor allem) vom Classpath diese Konfiguration zu defaulten und den Entwickler die Konfiguration dann selektiv abändern zu lassen. Das macht es sehr einfach, schnell zu starten und trotzdem die volle Kontrolle darüber zu behalten, was da konfiguriert wird.

3. Der Betrieb
Wenn man einem Nicht-Java-Entwickler erzählt, was man alles tun muss, um eine Webapplikation in Java neu anzulegen und zu starten bzw. zu betreiben, ist dieser nach 2 Minuten verwirrt und rennt davon. Warum muss es denn eigentlich komplexer sein, als eine Klasse mit einer main(…)-Methode zu starten? Richtig, muss es nicht! Zumindest für die Entwicklungszeit ist das ein sehr bequemer Weg, mit einer Serverapplikation zu arbeiten. Wir sehen in den Staaten auch vermehrt Produktionsbetrieb auf diese Art und Weise. Es deployed ohnehin kaum jemand mehr als eine Applikation in einen Server (aus guten Gründen). Von daher ist dieser Weg von „App-in-den-Server“ zu „Server-in-der-App“ nicht zu groß. Kritischer Punkt hier ist ganz klar die Integration des Systems in die Monitoring- und App-Management-Welt, die Boot über die Actuators angeht. Hier ist definitiv noch Spielraum für Erweiterungen.

Geschrieben von
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare

Schreibe einen Kommentar

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