Saltar al contenido

¿Cómo aplicar la paginación en Spring Data reactivo?

Solución:

Los repositorios de Reactive Spring Data MongoDB no proporcionan paginación en el sentido de cómo está diseñado para repositorios imperativos. La paginación imperativa requiere detalles adicionales al obtener una página. En particular:

  • El número de registros devueltos para una consulta de paginación.
  • Opcionalmente, el recuento total de registros que produce la consulta si el número de registros devueltos es cero o coincide con el tamaño de la página para calcular el número total de páginas.

Ambos aspectos no se ajustan a la noción de uso de recursos eficiente y sin bloqueos. Esperar hasta que se reciban todos los registros (para determinar la primera parte de los detalles de paginación) eliminaría una gran parte de los beneficios que obtiene con el acceso reactivo a los datos. Además, ejecutar una consulta de recuento es bastante costoso y aumenta el retraso hasta que pueda procesar los datos.

Aún puede obtener fragmentos de datos usted mismo pasando un Pageable (PageRequest) a los métodos de consulta del repositorio:

interface ReactivePersonRepository extends Repository<Person, Long> {

  Flux<Person> findByFirstnameOrderByLastname(String firstname, Pageable pageable);
}

Spring Data aplicará paginación a la consulta traduciendo Pageable para LIMIT y OFFSET.

Referencias:

  • Documentación de referencia: uso de repositorios reactivos

import com.thepracticaldeveloper.reactiveweb.domain.Quote;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import reactor.core.publisher.Flux;

public interface QuoteMongoReactiveRepository extends ReactiveCrudRepository<Quote, String> {

    @Query("{ id: { $exists: true }}")
    Flux<Quote> retrieveAllQuotesPaged(final Pageable page);
}

más detalles, puedes consultar aquí

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *