Spring WebFlux para Java: guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Spring WebFlux para Java: Guia Completo de Programação Reativa

1. O que é e para que serve

Spring WebFlux é um framework web reativo que faz parte do ecossistema Spring Framework 5+, oferecendo uma alternativa ao tradicional Spring MVC. Diferente da abordagem bloqueante (blocking), onde cada requisição HTTP é processada por uma thread separada, o WebFlux é baseado em um modelo de entrada e saída assíncrono e não bloqueante (non-blocking). Isso permite processar milhares de conexões simultâneas com um número mínimo de threads, algo essencial para sistemas de alta carga, microsserviços e aplicações em tempo real.

Para que serve o Spring WebFlux? No mundo atual, onde o número de usuários e dispositivos cresce exponencialmente, os contêineres servlet tradicionais (Tomcat, Jetty) enfrentam o problema "C10K" (processamento de 10.000 conexões simultâneas). Cada thread consome memória (cerca de 1 MB por pilha), e com 10.000 threads, isso resulta em 10 GB de RAM apenas para as pilhas. O WebFlux resolve esse problema usando o modelo de Fluxos Reativos (Reactive Streams), onde uma única thread pode processar várias requisições, alternando entre elas conforme os dados ficam prontos.

O WebFlux suporta dois tipos de servidores: Netty (recomendado, não bloqueante) e Servlet 3.1+ (Tomcat, Jetty, Undertow). Ele se integra totalmente com o Projeto Reactor (Mono e Flux) e pode usar o estilo funcional de roteamento (Router Functions) junto com as anotações @Controller. Isso o torna a escolha ideal para criar APIs de alto desempenho, servidores de eventos (SSE), aplicações WebSocket e microsserviços com bancos de dados reativos (MongoDB Reactive, R2DBC).

2. Instalação

O Spring WebFlux não é instalado via pip ou npm, pois é uma biblioteca para Java. Para usá-lo, você precisa adicionar a dependência ao seu projeto. Abaixo estão os comandos exatos para Maven e Gradle.

Maven (pom.xml)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
    <version>3.2.0</version> <!-- Use a versão mais recente -->
</dependency>

Gradle (build.gradle)

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

Se você estiver usando o Spring Initializr (start.spring.io), basta selecionar "Spring Reactive Web" na seção de dependências. Para trabalhar com bancos de dados de forma não bloqueante, adicione também:

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

3. Início rápido — exemplo mínimo funcional

Crie um controlador REST reativo simples que retorna uma saudação. Este exemplo demonstra a configuração básica do WebFlux usando anotações.

// 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("Olá do Spring WebFlux!");
    }
}

Execute a aplicação e acesse http://localhost:8080/hello. Você verá a mensagem "Olá do Spring WebFlux!". Observe que o método retorna Mono<String>, e não apenas

Recommendations