Как исправить |Параллельный (асинхронный) постраничный вызов базы данных, возвращающий дубликаты строк с реактором проекта - PullRequest
0 голосов
/ 20 мая 2019

Я хотел бы выполнять параллельные / асинхронные вызовы базы данных с разбивкой по страницам на каждой странице, возвращая уникальные результаты.Я использую проект-реактор с Java-8.Приведенный ниже код как-то извлекает дубликаты записей на некоторых страницах.Когда я запрашиваю каждую страницу непосредственно в БД, я получаю уникальный набор результатов на каждой странице.

List<Mono<List<User>>> usersMonos = new ArrayList<>();
IntStream.range(1, 5).forEach(i -> {
  usersMonos.add(Mono.fromSupplier(() -> {
  int from = (1 + (10000 * (i - 1)));
  int to = 10000 * i;
  List<User> users = userMapper.getPaginatedUser(userId, from, to);
  return users;
 }));
});

List<User> allPageUsers = Flux.zip(usersMonos, new UserTransformer())
            .collectList()
            .block()
            .stream()
            .flatMap(List::stream)
            .collect(Collectors.toList());
...