Weg mit dem Alten, her mit dem Neuen!

Spring Boot 1.4: Features, Fixes und Funktionserweiterungen

Dominik Mohilo

Spring Boot 1.3 ist bereits vor acht Monaten erschienen, höchste Zeit also für einen neuen Release-Train. Mit Version 1.4 ist der vorherige Versionsstrang 1.3.x offiziell beendet. Die neue Version bringt unter anderem deutlich verbesserte Fehlernachrichten beim Start-up, eine Überholung der Testunterstützung und einen praktischen Bild-zu-ASCII-Converter.

Wenige Stunden vor dem offiziellen Release von Spring Boot 1.4 wurde noch das letzte kleine Bugfix-Update des alten Release Trains veröffentlicht: Version 1.3.7. Kurz darauf erschien die erste Version vom neuesten Versionsstrang, welche vollständig auf dem Spring Framework 4.3 basiert.

Neben neuen Features sind auch etliche Verbesserungen bereits bestehender Funktionen mit an Bord. Das alles ist natürlich auch den über 280 Personen zu verdanken, die mit bislang über 8.500 Beiträgen (Commits) das Projekt kontinuierlich verbessert und erweitert haben.

Was ist neu?

Analyse von Start-up-Fehlern

Bislang war die Fehlerausgabe nach einem fehlerhaften Start-up zwar technisch gesehen korrekt, jedoch sehr uneffektiv. Sie bestand eigentlich nur aus einem Logfile und dessen Stack Trace und lieferte keine nützliche Diagnose. Mit dem aktuellen Update werden Fehleranalysen durchgeführt und übersichtlich die Informationen an den Nutzer weitergegeben:

***************************
APPLICATION FAILED TO START
***************************

Description:

Embedded servlet container failed to start. Port 8080 was already in use.

Action:

Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.

Will man trotzdem den Stack Trace sehen, etwa für eine tiefergehende Betrachtung des Problems, muss für org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter das Debug-Logging aktiviert werden.

Erweiterter Daten-Support

Der Standard-JPA-Provider von Spring Boot ist nun Hibernate 5.0, auch wenn ein Downgrade nach wie vor möglich ist. Wer große Probleme mit dem Update hat, der kann vorübergehend auch noch Hibernate 4.3 verwenden, allerdings wird dieses in nachfolgenden Versionen von Spring Boot nicht mehr unterstützt.

Die Aktualisierung bringt zudem die Unterstützung für Neo4J, Couchbase und die Redis Spring Data Repositories. Aufgewertet wurde die Elasticsearch-Integration, sodass sie nun den Jest-Client unterstützt.

Banner

Eine hübsche optische Funktion, die Spring Boot nun besitzt, ist die Konvertierung von Bannern in ASCII-Code. Dazu muss man lediglich eine Datei (banner.gif, banner.jpg oder banner.png) in src/main/resources legen, schon wird das Banner automatisch konvertiert.

Die neue Bild-zu-ASCII-Funktion / Quelle: Pivotal

Die neue Bild-zu-ASCII-Funktion / Quelle: Pivotal

Verbesserte Tests

Der Testing-Support wurde mit Spring Boot 1.4 einer kompletten Überholung unterzogen. Testklassen und -utensilien werden nun in dezidierten JARs zur Verfügung gestellt. Diese heißen spring-boot-test und spring-boot-test-autoconfigure.

Für den Test-Starter gibt es neue Abhängigkeiten für AssertJ, JSONassert und JsonPath, zudem gibt es eine einfachere allgemeine @SpringBootTest-Annotation, die mit Springs JUnit-Runner genutzt wird. Die Mockto-Integration erlaubt es Spring Beans zu mocken und zu spyen:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MyTest {

    @MockBean
    private RemoteService remoteService;

    @Autowired
    private Reverser reverser;

    @Test
    public void exampleTest() {
        // RemoteService has been injected into the reverser bean
        given(this.remoteService.someCall()).willReturn("mock");
        String reverse = reverser.reverseSomeCall();
        assertThat(reverse).isEqualTo("kcom");
    }

}

Viele Tests lassen sich nun auch automatisch konfigurieren, sodass Nutzer sehr viel weniger Einstellungen machen müssen. Die dezidierten Annotationen @JsonTest, @WebMvcTest, @RestClientTest und @DataJpaTest sorgen für schnelle Tests von Slices einer Anwendung.

Was wird entfernt?

Wie bei großen Updates üblich, wird auch bei Spring Boot 1.4 alles durch den Schredder gejagt, was in der Vorgängerversion bereits ad acta gelegt wurde. Sämtliche Klasse, Methoden und Eigenschaften, die in Version 1.3 als „deprecated“ gekennzeichnet wurden, sind nun nicht mehr verfügbar. Nutzern wird empfohlen, vor dem Upgrade sicherzustellen, dass keine Calls an entfernte Methoden mehr gehen. Neben diesen nun nicht mehr verfügbaren Features, ist die Unterstützung von Log4j 1 ebenfalls entfernt worden.

Auch Version 1.4 von Spring Boot setzt einige Funktionen auf die Ersatzbank: Der Vorgabe des Spring Frameworks 4.3 folgend, wurde unter anderem der Support für Velocity zu einem Auslaufmodell erklärt. Gleiches gilt für die Unterstützung von HornetQ; Nutzern dieses Tools wird die Migration auf Artemis empfohlen.

Eine komplette Änderungsübersicht zum aktuellen Spring Boot Release gibt es in den Release Nots auf GitHub.

Hintergrund

Über Spring Boot

Ziel von Spring Boot war von Anfang an die Vereinfachung des Einstiegs in die Enterprise-Java-Entwicklung. Seit etwa drei 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 gar nicht so 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 dieses 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.

Verwandte Themen:

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

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: