Was ist neu in Spring Boot 2?

1. Übersicht

Spring Boot bringt einen eigensinnigen Ansatz in das Spring-Ökosystem. Erstveröffentlichung Mitte 2014. Spring Boot wurde viel weiterentwickelt und verbessert. Die Version 2.0 wird heute Anfang 2018 veröffentlicht.

Es gibt verschiedene Bereiche, in denen diese beliebte Bibliothek versucht, uns zu helfen:

  • Abhängigkeitsmanagement. Durch Starter und verschiedene Paketmanager-Integrationen
  • Autokonfiguration. Um den Konfigurationsaufwand einer Spring-App zu minimieren, müssen Sie sich bereit machen und die Konvention der Konfiguration vorziehen
  • Produktionsbereite Funktionen. Wie Aktor , bessere Protokollierung, Überwachung, Metriken oder verschiedene PAAS-Integration
  • Verbesserte Entwicklungserfahrung. Mit mehreren Testprogrammen oder einer besseren Rückkopplungsschleife mit Spring-Boot-Devtools

In diesem Artikel werden einige Änderungen und Funktionen erläutert, die für Spring Boot 2.0 geplant sind. Wir werden auch beschreiben, wie diese Änderungen uns helfen können, produktiver zu werden.

2. Abhängigkeiten

2.1. Java Baseline

Spring Boot 2.x unterstützt Java 7 und niedriger nicht mehr , da Java 8 die Mindestanforderung ist.

Es ist auch die erste Version, die Java 9 unterstützt. Es gibt keine Pläne, Java 9 im 1.x-Zweig zu unterstützen. Dieses Mittel , wenn Sie die neueste Java - Release und nutzen dieses Rahmens, Frühling Boot - 2.x ist Ihre einzige Option verwenden möchten .

2.2. Stückliste

Mit jeder neuen Version von Spring Boot werden Versionen verschiedener Abhängigkeiten des Java-Ökosystems aktualisiert. Dies ist in der Stückliste " Boot Bill of Materials " ( Stückliste) definiert .

In 2.x ist dies keine Ausnahme. Es macht keinen Sinn, sie aufzulisten, aber wir können uns spring-boot-dependencies.pom ansehen, um zu sehen, welche Versionen zu einem bestimmten Zeitpunkt verwendet werden.

Einige Highlights bezüglich der minimal erforderlichen Versionen:

  • Die von Tomcat mindestens unterstützte Version ist 8.5
  • Die unterstützte Mindestversion für den Ruhezustand ist 5.2
  • Die unterstützte Gradle-Mindestversion ist 3.4

2.3. Gradle Plugin

Das Gradle-Plugin wurde erheblich verbessert und es wurden einige wichtige Änderungen vorgenommen.

Um fette Gläser zu erstellen, wird die Aufgabe von bootRepackage Gradle durch bootJar und bootWar ersetzt , um Gläser bzw. Kriege zu erstellen.

Wenn wir unsere Apps mit dem Gradle-Plugin in 1.x ausführen wollten , konnten wir gradle bootRun ausführen . In 2.x bootRun erweitert die Gradle JavaExec. Dies bedeutet, dass es für uns einfacher ist, es mit derselben Konfiguration zu konfigurieren, die wir normalerweise in klassischen JavaExec- Aufgaben verwenden würden.

Manchmal möchten wir die Spring Boot BOM nutzen. Aber manchmal möchten wir keine vollständige Boot-App erstellen oder neu packen.

In diesem Zusammenhang ist es interessant zu wissen, dass Spring Boot 2.x das Abhängigkeitsverwaltungs-Plugin standardmäßig nicht mehr anwendet .

Wenn wir das Spring Boot-Abhängigkeitsmanagement wünschen, sollten wir hinzufügen:

apply plugin: 'io.spring.dependency-management'

Dies gibt uns mehr Flexibilität bei weniger Konfiguration im oben genannten Szenario.

3. Autokonfiguration

3.1. Sicherheit

In 2.x wird die Sicherheitskonfiguration erheblich vereinfacht. Standardmäßig ist alles gesichert, einschließlich statischer Ressourcen und Actuator-Endpunkte.

Sobald der Benutzer die Sicherheit explizit konfiguriert hat, wirken sich die Spring Boot-Standardeinstellungen nicht mehr aus. Der Benutzer kann dann alle Zugriffsregeln an einem einzigen Ort konfigurieren.

Dies verhindert, dass wir Probleme mit der Bestellung von WebSecurityConfigurerAdapter haben. Diese Probleme traten normalerweise auf, wenn die Sicherheitsregeln von Actuator und App auf benutzerdefinierte Weise konfiguriert wurden.

Schauen wir uns ein einfaches Sicherheits-Snippet an, das Aktor- und Anwendungsregeln kombiniert:

http.authorizeRequests() .requestMatchers(EndpointRequest.to("health")) .permitAll() // Actuator rules per endpoint .requestMatchers(EndpointRequest.toAnyEndpoint()) .hasRole("admin") // Actuator general rules .requestMatchers(PathRequest.toStaticResources().atCommonLocations()) .permitAll() // Static resource security .antMatchers("/**") .hasRole("user") // Application security rules // ...

3.2. Reaktive Unterstützung

Spring Boot 2 bringt eine Reihe neuer Starter für verschiedene reaktive Module. Einige Beispiele sind WebFlux und die reaktiven Gegenstücke für MongoDB, Cassandra oder Redis.

Es gibt auch Testdienstprogramme für WebFlux. Insbesondere können wir @WebFluxTest nutzen. Dies verhält sich ähnlich wie bei dem älteren @WebMvcTest, der ursprünglich als Teil der verschiedenen Test- Slices in 1.4.0 eingeführt wurde.

4. Produktionsbereite Funktionen

Spring Boot bietet einige nützliche Tools, mit denen wir produktionsbereite Anwendungen erstellen können. Unter anderem können wir Spring Boot Actuator nutzen.

Actuator enthält verschiedene Tools zur Vereinfachung der Überwachung, Nachverfolgung und allgemeinen Introspektion von Apps. Weitere Details zum Stellantrieb finden Sie in unserem vorherigen Artikel.

Mit seiner 2-Version Aktuator wurde durch wesentliche Verbesserungen. Diese Iteration konzentriert sich auf die Vereinfachung der Anpassung. Es unterstützt auch andere Webtechnologien, einschließlich des neuen reaktiven Moduls.

4.1. Technischer Support

In Spring Boot 1.x wurde nur Spring-MVC für Aktorendpunkte unterstützt. In 2.x wurde es jedoch unabhängig und steckbar. Spring Boot bietet jetzt sofort Unterstützung für WebFlux, Jersey und Spring-MVC.

As before, JMX remains an option and can be enabled or disabled through configuration.

4.2. Creating Custom Endpoints

The new actuator infrastructure is technology-agnostic. Because of this, the development model has been redesigned from scratch.

The new model also brings greater flexibility and expressiveness.

Let's see how to create a Fruits endpoint for actuator:

@Endpoint(id = "fruits") public class FruitsEndpoint { @ReadOperation public Map fruits() { ... } @WriteOperation public void addFruits(@Selector String name, Fruit fruit) { ... } }

Once we register FruitsEndpoint in our ApplicationContext, it can be exposed as a web endpoint using our chosen technology. We could also expose it via JMX depending on our configuration.

Translating our endpoint to web endpoints, this would result in:

  • GET on /application/fruits returning fruits
  • POST on /applications/fruits/{a-fruit} handling that fruit which should be included in the payload

There are many more possibilities. We could retrieve more granular data. Also, we could define specific implementations per underlying technology (e.g., JMX vs. Web). For the purpose of the article, we'll keep it as a simple introduction without getting into too much detail.

4.3. Security in Actuator

In Spring Boot 1.x Actuator defines its own security model. This security model is different from the one used by our application.

This was the root of many pain points when users were trying to refine security.

In 2.x the security configuration should be configured using the same config that the rest of the application uses.

By default, most actuator endpoints are disabled. This is independent of whether Spring Security is in the classpath or not. Beyond status and info, all the other endpoints need to be enabled by the user.

4.4. Other Important Changes

  • Most configuration properties are now under management.xxx e.g.: management.endpoints.jmx
  • Some endpoints have a new format. e.g.: env, flyway or liquibase
  • Predefined endpoint paths are no longer configurable

5. Enhanced Development Experience

5.1. Better Feedback

Spring boot introduced devtools in 1.3.

It takes care of smoothing out typical development issues. For example, caching of view technologies. It also performs automatic restarts and browser live-reloading. Also, it enables us to remote debug apps.

In 2.x when our application gets restarted by devtools a ‘delta' report will be printed out. This report will point out what changed and the impact it might have on our application.

Let's say we define a JDBC Datasource overriding the one configured by Spring Boot.

Devtools will indicate that the one autoconfigured is no longer created. It will also point out the cause, an adverse match in @ConditionalOnMissingBean for type javax.sql.DataSource. Devtools will print this report once it performs a restart.

5.2. Breaking Changes

Due to JDK 9 issues, devtools is dropping support for remote debugging through HTTP.

6. Summary

In this article, we covered some of the changes that Spring Boot 2 will bring.

We discussed dependencies and how Java 8 becomes the minimum supported version.

Next, we talked about autoconfiguration. We focused on security among others. We also talked about actuator and the many improvements it has received.

Lastly, we talked about some minor tweaks that happened in the development tools provided.