Spring WebFlux Java: Vollständige Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Spring WebFlux für Java: Vollständige Anleitung zur reaktiven Programmierung

1. Was ist Spring WebFlux und warum wird es benötigt?

Spring WebFlux ist ein reaktives Web-Framework aus dem Spring Framework 5+ Ökosystem, das eine Alternative zum traditionellen Spring MVC bietet. Im Gegensatz zum blockierenden Ansatz, bei dem jede HTTP-Anfrage von einem eigenen Thread verarbeitet wird, basiert WebFlux auf einem asynchronen, nicht blockierenden (non-blocking) E/A-Modell. Dadurch können tausende gleichzeitige Verbindungen mit minimaler Thread-Anzahl verarbeitet werden – entscheidend für hochlastige Systeme, Microservices und Echtzeitanwendungen.

Warum wird Spring WebFlux benötigt? In der heutigen Welt, in der die Anzahl der Nutzer und Geräte exponentiell wächst, stoßen traditionelle Servlet-Container (Tomcat, Jetty) auf das "C10K-Problem" (Verarbeitung von 10.000 gleichzeitigen Verbindungen). Jeder Thread verbraucht Speicher (ca. 1 MB pro Stack), was bei 10.000 Threads zu 10 GB RAM allein für die Stacks führt. WebFlux löst dieses Problem durch das reaktive Streams-Modell (Reactive Streams), bei dem ein einzelner Thread viele Anfragen bearbeiten kann, indem er zwischen ihnen wechselt, sobald Daten bereitstehen.

WebFlux unterstützt zwei Servertypen: Netty (empfohlen, nicht blockierend) und Servlet 3.1+ (Tomcat, Jetty, Undertow). Es ist vollständig in das Reactor-Projekt (Mono und Flux) integriert und kann sowohl den funktionalen Routing-Stil (Router Functions) als auch @Controller-Annotationen nutzen. Damit ist es die ideale Wahl für leistungsstarke APIs, Server-Sent-Events (SSE), WebSocket-Anwendungen und Microservices mit reaktiven Datenbanken (MongoDB Reactive, R2DBC).

2. Einrichtung

Spring WebFlux wird nicht über pip oder npm installiert, da es sich um eine Java-Bibliothek handelt. Um es zu nutzen, müssen Sie die Abhängigkeit zu Ihrem Projekt hinzufügen. Nachfolgend finden Sie die genauen Befehle für Maven und Gradle.

Maven (pom.xml)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
    <version>3.2.0</version> <!-- Aktuelle Version verwenden -->
</dependency>

Gradle (build.gradle)

implementation 'org.springframework.boot:spring-boot-starter-webflux:3.2.0'

Wenn Sie Spring Initializr (start.spring.io) verwenden, wählen Sie einfach "Spring Reactive Web" im Bereich der Abhängigkeiten. Für nicht blockierende Datenbankoperationen fügen Sie außerdem hinzu:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
</dependency>

3. Schnellstart – Minimales funktionierendes Beispiel

Erstellen Sie einen einfachen reaktiven REST-Controller, der eine Begrüßung zurückgibt. Dieses Beispiel zeigt die grundlegende Konfiguration von WebFlux mit Annotationen.

// MainApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }
}

// GreetingController.java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;

@RestController
public class GreetingController {

    @GetMapping("/hello")
    public Mono<String> sayHello() {
        return Mono.just("Hallo von Spring WebFlux!");
    }
}

Starten Sie die Anwendung und öffnen Sie http://localhost:8080/hello. Sie sehen die Zeichenkette "Hallo von Spring WebFlux!". Beachten Sie: Die Methode gibt Mono<String> zurück, nicht einfach

Empfehlungen