Die STS (Spring Tools Suite) wurde von Grund auf neu geschrieben und erhält mit der Spring Tools 4 einen neuen Nachfolger. Spring Tools 4 befindet sich aktuell (seit Dezember 2017) in der Betaphase und wird im Juli 2018 den GA Status erlangen. Bis dahin wird STS 3.9.X weiterhin mit Updates versorgt.

Spring 4 Tools ist eine Neuentwicklung und setzt auf das Language Server Protocol (LSP) auf und somit werden alle Features auch in anderen Komponenten (IDEs, Editoren etc.) nutzbar. Unter anderem auch unter VS Code von Microsoft.

Kompatibilität

Komponenten aus STS können auch weiterhin in Spring 4 Tools als AddOn Komponenten genutzt werden.

Alt bekanntes

Das Boot Dashboard View bleibt erhalten. Es erhält aber ein nützliches Feature. Es können Beans und Properties der laufenden Anwenung per Icon angezeigt werden.

Neue Features in Eclipse

Super schnelle Navigation in Spring Projetken

STRG + 66 startet den Dialog.

  • @/
  • @+

Installation

Es gibt das Beta als Bundle oder aber auch als Repository:

  • http://dist.springsource.com/release/TOOLS/sts4/update/e4.7/ <== Oxygen
  • http://dist.springsource.com/release/TOOLS/sts4/update/e4.8/ <== Photon

Alle Information zur Installation findet man unter im Wiki.
Das Changelog findet man hier.

Spring Boot 2.0 GA

Nach 17 Monaten Entwicklungszeit ist Spring Boot 2.0 GA fertig!

Neues in Spring Boot 2.0

  • Spring Boot wurde auf Java 8 portiert mit Java 9 Unterstüung.
  • Reaktive Web Programming mit Spring WebFlux/WebFlux.fn.
  • Auto-configuration und Starter POMs für reaktive Spring Data Cassandra, MongoDB, Couchbase and Redis.
  • Unterstützung für embedded Netty.
  • Tomcat, Undertow and Jetty unterstützen HTTP/2.
  • Actuator Architektur mit Support für Spring MVC, WebFlux and Jersey.
  • Metriken können mit Micrometer erhoben werden. Es kann nach Atlas, Datadog, Ganglia, Graphite, Influx, JMX, New Relic, Prometheus, SignalFx, StatsD and Wavefront exportiert – werden.
  • Quartz Scheduler Support.
  • Spring Security wurde stark vereinfacht.

Migrationsleitfaden

Die erster große neue Version seit 4 Jahren beinhaltet sehr viele Änderungen. Daher gibt es unter https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide einen Migrationsleitfaden der Entwickler bei der Migration auf Spring Boot 2.0 hilft.

Java 9

Neu ist zu erwähnen das Spring Boot 2.0 auch unter Java 9 läuft. Hierfür gibt es https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-Java-9 eine Anleitung und Beschreibung der bekannten Probleme.

Actuator stellt diverse Metriken der Anwendung zur Verfügung. Waren die Endpoints vor Spring Boot 2.0 im Wurzelverzeichnis eingehangen, so werden diese nun zentral unterhalb des Prefixes /actuator bereitgestellt. Dieses verhindert Kollisionen mit der Anwendung.

Neu ist das per default nicht alles angezeigt wird. Das verhindert das versehendlich unnötig viele Details der Anwendung exposed werden.

Standard Metriken

Folgende Endpoints werden per default angezeigt.

  • /actuator
  • /actuator/health
  • /actuator/info

Security

Weitere Endpoints können über eine Property (z.B. application.properties) exposed werden. Welche Endpoints exposed werden, wird über den management.endpoints.web.expose Wert gesteuert.

management.endpoints.web.expose=*

Stellt alle Endpoints unter /actuator zur Verfügung.

Conditions

Unter /conditions stellt actuator alle Konditionen zur Verfügung. Über diese Konditionen kann man Rückschlüsse ziehen warum sich Spring so verhält. Es werden alle AutoConfigure Optionen angezeigt.

/actuator/configuration

ConfigProps

Spring Boot erreicht mit dem Release des RC1 einen weiteren wichtigen Meilenstein.

Spring Boot 2.0.0.RC1

Portierung auf 2.0

Wenn eine Anwendung von einem älteren Releasestand auf 2.0.0 portiert werden soll, so haben sich wahrscheinlich einige der Properties geändert. D.h. sie sind zum Beispiel entfallen oder wurden durch andere ersetzt. Ja alle Änderungen sind in den Milestones dokumentiert oder man kann den Migrationcheck verwenden, aber trotzdem wird es vorkommen nicht alles berücksichtig wird.

Abhilfe schafft das neue Modul deprecated properties support.

org.springframework.boot:spring-boot-deprecated-properties-support

Wird dieses als Abhängikeit in den Classpath mit aufgenommen, so kann es teileweise Ersetzungen vornehmen und veraltete Properties in dem Log ausgeben.

Änderungen PatternMatching bei RequestMappings

Eine Anfrage “GET /projects/spring-boot.json” wird nicht mehr automatisch auf @GetMapping(“/projects/spring-boot”) gemappt, da es in der Vergangenheit oft Probleme mit der Zuordnung gegeben hat und es dadurch ggf. Sicherheitslücken auftreten können. Aus diesem Grunde wurde im RC1 das Feature abgeschaltet und darauf verwiesen den Best Practiceses zu folgen.

Beispiel

/pets.json

@GetMapping(path = "/pets/{petId}", produces = "application/json;charset=UTF-8")
@ResponseBody
public Pet getPet(@PathVariable String petId) {
// ...
}

@PostMapping(path = "/pets", consumes = "application/json")
public void addPet(@RequestBody Pet pet) {
// ...
}

Actuator

Actuator mappings

Der Endpoint /actuator/mappings wurde komplett überarbeitet und das JSON angepasst, sodass die Context Hierachie abgebildet werden kann.

Endpunkt /actuator/trace wurde umbenannt

Der Endpunkt /actuator/trace wurde in /actuactor/httptrace umbenannt. Es wurden auch einige Änderungen vorgnommen, um den HTTP Request Austausch besser abzubilden (siehe).

Konfiguration

Die Konfigurationsschlüssel wurden weiter harmoniesiert.

  • spring.banner
  • spring.metrics –> management.metrics

Ab dem Milestone 2.0.0.M7 ist es möglich sämtliche Durations aus dem JSR 310 anzugeben. Das Properties die vorher eine Angabe is Sekunden oder sogar in Millisekunden benötigten, können jetzt Werte wie z.B.

  • 2d
  • 1w

enthalten. Spring Boot konvertiert diese intern, so dass hier keine Umrechnung mehr stattfinden muss.

Die Konfiguration von

server.session.cookie.max-age=2d

ist somit valide.

Spring DevTools

LiveReload ist ein kleines Plugin für den Browser welches über Änderungen an dem Quelltext mitgeteilt bekommt und dafür sorgt, dass die Seite neu im Browser geladen wird. Somit lassen sich Änderungen der Seite sofort erkennen und verkürzt die turn-around Zeiten.

LiveReload benötigt einen Server welcher über ein einfaches Protokoll dem Plugin Änderungen anzeigt. Fügt man die Devtools als Dependency in dem Spring Projekt ein, so wird dieser automatisch beim Starten der Application gestartet. Es ist keine weitere Konfiguration nötig.

Installation des Browser Plugins

Plugin Chrome Plugin Firefox

Spring Dependency

Im Gradle Buildskript muss nur zur Runtime DevTools eingebunden werden.

dependencies {
    runtimeOnly('org.springframework.boot:spring-boot-devtools')
}

Sinnvolle Properties werden automatisch gesetzt

Wenn DevTools geladen werden, dann werden auch gleich einige Properties automatisch angepasst. Dieses geschied in der Klasse https://github.com/spring-projects/spring-boot/blob/v2.0.6.RELEASE/spring-boot-project/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/env/DevToolsPropertyDefaultsPostProcessor.java. Die Klasse implementiert einen EnvironmentPostProcessor. Hier wird über die @Order Annotation die niedrigste Ordered.LOWEST_PRECEDENCE gewählt, so dass die Properties Vorrang haben und andere Defaultwerte überschreiben.

spring.thymeleaf.cache=false
spring.freemarker.cache=false
spring.groovy.template.cache=false
spring.mustache.cache=false
server.servlet.session.persistent=true
spring.h2.console.enabled=true
spring.resources.cache.period=0
spring.resources.chain.cache=false
spring.template.provider.cache=false
spring.mvc.log-resolved-exception=true
server.servlet.jsp.init-parameters.development=true
spring.reactor.stacktrace-mode.enabled=true

Das heißt für die oben gelisteten sinnvollen Properties muss man keine gesonderte Properties Datei anlegen, die nur in der Entwicklungsumgebung eingebunden wird.

DevTools remote benutzen

Per Default kann man die DevTools nicht remote verwenden. Die DevTools sollten auch nicht in Produktiv Umgebungen genutzt werden, aber es kann hilfreich sein sie in PreProduction Environments zur Fehlersuche zu nutzen.

bootWar {
    excludeDevtools = false
}   

Siehe Beschreibung [https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#packaging-executable-configuring-excluding-devtools](Excluding DevTools in Packaging).

Zusätzlich lässt sich über

spring.devtools.remote.secret=meingeheimnis

ein Passwort setzen.

Disable Live-Reload Server

Das Starten des Live-Relaod Servers kann auch gesteuert werden. Hierfür wird die Property

spring.devtools.livereload.enabled=false

genutzt.

Kommerzielle Variante

JRebel von zerroturnaround kann nicht nur die Änderungen am Quelltext deployen, sondern zusätzlich auch z.B. externe Jars, die als Abhängigkeiten vom Projekt eingefügt sind. Diese Funktionalität bietet das Duo nicht, dafür ist es eine einfache und kostenlose Alternative.

Der Banner ist das Ascii GFX Logo mit Informationen welches beim Start von Spring Boot auf der Konsole ausgegeben wird.

Abschalten

Mit der Option hide banner in der IDE kann der Banner verbannt werden.

Anpassen des Banner

In der application.properties kann spring.main.banner-mode die Werte off, log, console annehmen.

  • off –> keine Ausgabe
  • log –> Ausgabe in den Logger
  • console –> (default) Ausgabe auf der Konsole

Logo und Informationen anpassen

Ab Spring Boot 1.4 kann über die Testdatei banner.txt das Aussehen des Banners angepasst werden. Hierzu muss die Datei nur vorhanden sein, dann wird sie automatisch von Spring verwendet. Die Grafiken können mit einem beliebigen AsciiArt Generator erstellt werden.

In der AsciiArt lassen sich auch ColorCode verwenden, so dass sich das Logo auch farblich gestalten lässt. Die Angabe des ColorCode erfolgt nach dem Schema:

${AnsiColor.RED}

Die AsciiArt kann z.B. auch aus einem vorhandenen Bild erzeugt werden. AsciiArt Generator

PNG als Logo

Ist die Datei banner.png vorhanden, dann konvertiert Spring Boot dieses automatisch in AsciiArt.

Animierte GIFs

Mit Spring Boot 2.0 werden auch animierte GIFs unterstützt. Diese blockieren aber die Ausführung des Programms.