Suche
Interview mit Stéphane Nicoll, Software Engineer bei Pivotal

Erster Meilenstein für Spring Boot 2: Wohin geht die Reise?

Hartmut Schlosser

Stéphane Nicoll

Der erste Meilenstein für Spring Boot 2.0.0 ist erreicht. Mit der Unterstützung für das Spring Framework 5 hält auch die reaktive Programmierung Einzug in Spring Boot. Wir haben auf der JAX 2017 mit Stéphane Nicoll (Pivotal) darüber gesprochen, wie sich die reaktive Programmierung in Spring Boot 2 äußert, und was uns bis zum finalen Release sonst noch erwartet.

JAXenter: Eines der wichtigsten Themen in Spring Boot 2.0 ist die Unterstützung für Spring 5. Was heißt das genau?

Spring Boot 2 bietet eine Alternative zum  blockierenden Modell des Servlet APIs.

Stéphane Nicoll: Eine der wichtigsten Neuerungen im Spring Framework 5 ist der Support für die reaktive Programmierung. Damit bietet sich eine Alternative zum traditionellen blockierenden Modell, das auf dem Servlet API basierte. Spring Boot 2 integriert diese Veränderungen in Form eines neuen „WebFlux“-Starters, der auf Netty aufbaut. Mit diesem WebFlux-Starter kann die Anwendungsentwicklung dann genauso schnell beginnen, wie man das bereits vom Web Starter her kennt.

Spring 5 ist außerdem auf eine funktionale Programmierung hin optimiert und stellt verschiedene Bausteine zur Verfügung, aus denen Anwendungen zusammengestellt werden können. Wenn sich jemand etwa dafür entscheidet, seinen Router funktional zu definieren statt mittels Annotationen, dann merken wir das und konfigurieren den Server entsprechend.

Daraus folgt, dass Anwender nun komplett funktional arbeiten können. Dazu passt auch unsere Unterstützung für die Programmiersprache Kotlin. Spring Boot 2 wird spezifische Extensions für Kotlin mitbringen, sodass man die gesamte Mächtigkeit der Sprache ausnutzen kann.

JAXenter: Kannst du uns ein kleines Beispiel dafür geben, wie Spring 5 das Reactive Programming einschließt?

Stéphane Nicoll: Die Idee des Spring Frameworks ist es, ein konsistentes Programmiermodell bereit zu stellen, das es Entwicklern ermöglicht, ihr Vorwissen auf neue Paradigmen zu übertragen. Auch die Unterstützung der reaktiven Programmierung folgt genau diesem Grundgedanken.

Schauen wir uns beispielsweise einmal den folgenden Quellcode eines reaktiven Endpoints mit Spring 5 an:

@RestController 
public class SpeakerController {

  private final SpeakerRepository repository ; 
  public SpeakerController(SpeakerRepository repository) {
    this.repository = repository; 
}
  @GetMapping ("/speakers/{id}")

  public Mono<Speaker> getById( @PathVariable String id) { 
    return repository .findOne(id).otherwiseIfEmpty(Mono.error (
      
new ResponseStatusException(HttpStatus. NOT_FOUND , "not found" ))); 
  } 
  @GetMapping ( "/speakers" ) 
  public Flux<Speaker> getAll() {
   } return repository .findAll(); 
  @PostMapping ("/speakers")

  public Mono<Void> save(Mono<Speaker> speaker) {
    return repository .save(speaker).then(); 
  }
} 

Dieser Controller ist von Anfang bis Ende reaktiv und fühlt sich auch für Nutzer der aktuellen Spring-Boot-Generation recht natürlich an. Wie üblich reagieren wir auf Methodensignaturen und kümmern uns für unsere Anwender um den Boilerplate-Code.

Ein weiteres Beispiel ist die Verwendung unseres neuen Web Clients, mit dem ganz leicht multiple Aufrufe von Remote-Services auf reaktive Weise zusammengesetzt werden können.

JAXenter: Wie findet sich die reaktive Programmierung in Spring Boot 2.0 wieder?

Stéphane Nicoll: Primär in einer unterstützenden Rolle: Wenn sich jemand für die Verwendung des WebFlux-Stacks entscheidet, werden die notwendigen Teile automatisch konfiguriert – genauso wie es heute schon bei WebMvc ist. Wenn sich jemand für das funktionale Routing entscheidet, bemerkt Spring Boot 2 auch das.

Wir haben geplant, vorhandene Spring-Boot-Komponenten zu überarbeiten, um den reaktiven Stack zu unterstützen. Die Änderungen werden aber im Großen und Ganzen nicht den User betreffen. WebFlux wird als Einstiegspunkt dienen, so ähnlich wie heute WebMvc.

JAXenter: Was bringt Spring Boot 2.0 sonst noch Neues mit?

Wir haben das Gradle Plug-in von Grund auf neu geschrieben.

Stéphane Nicoll: Spring Boot geht als Projekt deutlich von gewissen Annahmen aus, macht also klare Vorgaben dazu, wie bestimmte Ding auszusehen haben. Eine neue Major-Version gibt uns die Möglichkeit, diese Annahmen zu überdenken und einige davon zu überarbeiten, wenn das sinnvoll erscheint. Wir haben beispielsweise das Gradle Plug-in auf Grundlage des Feedbacks aus der Community von Grund auf neu geschrieben. Dabei haben wir erhebliche Änderungen daran vorgenommen, wie Configuration Keys intern gehandhabt werden. Bei diesem Release geht es hauptsächlich darum, ein stabiles Fundament und eine gute Basis zu legen, auf der wir aufbauen können.

JAXenter: Mal abgesehen von den konkreten Features: Worauf kommt es euch in Spring Boot 2 an?  Wohin geht die Reise?

Stéphane Nicoll: Die Unterstützung zweier unterschiedlicher Web-Anwendungs-Paradigmen ist durchaus eine Herausforderung und macht es nötig, einige der wichtigsten Grundsätze von Spring Boot zu überdenken. Unser Ziel ist es, dass sich das Start-Erlebnis mit WebFlux genauso natürlich anfühlt wie das, was wir heute mit WebMvc bieten. Damit wollen wir eine einfache Möglichkeit zum Ausprobieren der reaktiven Programmierung bieten.

Die reaktive Programmierung ist eine neue Option, für die man sich in Abhängigkeit davon entscheiden kann, was für eine Anwendung man schreibt. Wer diesen Weg wählt, wird von uns auf dieser Reise begleitet: Man findet ein vertrautes Entwicklungsmodell vor; Spring Boot wird die Infrastruktur automatisch konfigurieren. Es ist auch möglich, später noch funktionaler zu werden, wenn man das will!

Natürlich ist es aber definitiv auch nicht falsch, klassische MVC-Apps zu bauen: Unser Support für Web Stacks auf Basis von Servlets bleibt als sehr gute Option erhalten und ist weiterhin kompatibel mit Servlet-basierten Technologien und traditionellen Stilen der Interaktion mit dem Datenspeicher.

Vielen Dank für das Gespräch!

Stéphane Nicoll
Stéphane has a thing for code quality and robustness. He’s been spreading the word for more than ten years while developing large scale Java enterprise applications in the geospatial, financial, or logistics sectors. An Apache Maven PMC member since 2006, he joined the core Spring Framework development team early 2014, being one of the main contributors to both Spring Framework and Spring Boot since. During his free time, he loves traveling around the world.
Geschrieben von
Hartmut Schlosser
Hartmut Schlosser
Hartmut Schlosser ist Redakteur und Online-Koordinator bei Software & Support Media. Seine Spezialgebiete liegen bei Java-Enterprise-Technologien, JavaFX, Eclipse und DevOps. Vor seiner Tätigkeit bei S & S Media studierte er Musik, Informatik, französische Philologie und Ethnologie.
Kommentare
  1. Heinz2017-05-22 13:19:44

    In Eurem Codebeispiel ist leider einiges schiefgegangen was die Sonderzeichen angeht.
    &lt; usw.

  2. Hartmut Schlosser2017-05-22 16:15:47

    Das Beispiel ist gefixt - vielen Dank für den Hinweis!

Schreibe einen Kommentar

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