Skip to content

Spring Data Reactive Repository Pattern (WebFlux)

Working with databases in WebFlux requires non-blocking reactive data access, like R2DBC (Reactive Relational Database Connectivity) for SQL databases and MongoDB for NoSQL

Example (R2DBC)

java
import org.springframework.data.r2dbc.repository.R2dbcRepository;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Mono;
import reactor.core.publisher.Flux;

@Repository
public interface UserRepository extends R2dbcRepository<User, String> {
    // Custom query methods
    Mono<User> findByEmail(String email);
    Flux<User> findAllByActive(boolean active);
}

Example (Mongo Reactive)

java
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
import org.springframework.stereotype.Repository;
import reactor.core.publisher.Mono;

@Repository
public interface UserRepository extends ReactiveMongoRepository<User, String> {
    Mono<User> findByEmail(String email);
}

Guidelines

  • Extend R2dbcRepository or ReactiveMongoRepository for reactive data access.
  • Use method naming conventions for custom queries (e.g., findBy...).
  • Return Mono<T> for single results, Flux<T> for collections.
  • Use @Query for custom queries if needed.
  • Avoid blocking calls in repository methods.
  • Annotate with @Repository (optional with Spring Boot, but recommended for clarity).

References

Copyright © MSG Systems Romania AI Labs