Неверные данные Json из Spring WebfluxJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Неверные данные Json из Spring Webflux

Сообщение Anonymous »

Я отвечаю за предоставление API, который должен возвращать большое количество данных (от 500 000 до 7 000 000 строк) из базы данных mysql. Для этого мы выбрали потоковую передачу с помощью Spring Webflux. Реализация правильная, однако при получении возвращаемых данных JSON в определенных местах они искажаются и совершенно случайным образом. Я бьюсь над этой проблемой уже несколько дней.
Как видно из исходного кода, я сначала получаю общее количество строк, присутствующих в базе данных, прежде чем выполнять внутреннюю разбивку по страницам и асинхронное получение данных через потоки, затем эти потоки реорганизуются, и их данные объединяются в выходной поток. У меня такое впечатление, что именно с этой частью я не справился, потому что данные в потоке перекрываются. Ваша помощь будет мне очень полезна.
Исходный код класса обслуживания:

Код: Выделить всё

    @Override
public Flux getAllFromDifferentiel() throws InterruptedException, ExecutionException {
logger.info("Appel de la methode getAllFromDifferentiel()");
//Initialisation du flux de sortie
returnedFlux = Flux.empty();

//Recuperation du total de ligne
Mono totalRecords = repository.count();
int total = totalRecords.toFuture().get();

//Debut des calculs
int relicat = total % limit;
totalPage = (total / limit) + (relicat > 0 ? 1 : 0);

logger.info("Total page possible: " + totalPage);
Thread[] tasks = new Thread[totalPage];

for (int indexPage = 0; indexPage < totalPage; indexPage++) {

//Lancement en parallèle des requetes de pagination

int finalIndexPage = indexPage;

tasks[indexPage] = new Thread(() -> {

offset = finalIndexPage == 0 ? 0 : limit * finalIndexPage + 1;
logger.info("Page = " + (finalIndexPage + 1) + "      Offset =" + offset);

//Regroupement des flux générés apres execution de la requete
returnedFlux = Flux.concat(returnedFlux , repository.getAllByPage(limit, offset).map(ObjectReturn.INSTANCE::mapToDTO));

});
tasks[indexPage].start();

//Agencement ordonné des tâches
try {
tasks[indexPage].join();

} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}

return returnedFlux
.doOnError(error -> {
logger.error("--------- Stream error ------------" + error.getMessage(), error);
throw new IllegalStateException(error);
})
.doOnCancel(() -> {
logger.info("--------- Stream canceled -------------");
})
.doOnComplete(() -> {
logger.info("--------- Stream completed -------------");
});

}
Исходный код контроллера:

Код: Выделить всё

@GetMapping(value = "getData", produces = MediaType.APPLICATION_NDJSON_VALUE)
public Flux getAllFromDifferentiel() throws InterruptedException, ExecutionException {
return service.getAllFromDifferentiel();
}
Результат после вызова API:
Полезная нагрузка ответа
Как вы можете см. в json, открытом с помощью VsCode, некоторые данные искажены, что приводит к неравномерности конечного файла json. И эта проблема возникает на нескольких уровнях результирующего файла.

Подробнее здесь: https://stackoverflow.com/questions/787 ... ng-webflux
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Неверные данные Json из Spring Webflux
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Неверные данные Json из Spring Webflux
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Ошибка запроса API API API. Неверные параметры неверные параметры
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как прочитать файл json реактивным образом с помощью Spring Webflux?
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Почему Spring-Cloud-Sleuth не работает должным образом с Spring-Boot 2.7 и Webflux?
    Anonymous » » в форуме JAVA
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»