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
R2dbcRepositoryorReactiveMongoRepositoryfor reactive data access. - Use method naming conventions for custom queries (e.g.,
findBy...). - Return
Mono<T>for single results,Flux<T>for collections. - Use
@Queryfor custom queries if needed. - Avoid blocking calls in repository methods.
- Annotate with
@Repository(optional with Spring Boot, but recommended for clarity).