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.