Невозможно подписаться на Mono <XXX>spring webflux - PullRequest
0 голосов
/ 02 февраля 2020

Я пытаюсь написать простой код, который берет некоторую дату и обрабатывает его, используя реактивный набор элементов поиска: это фрагмент кода -

            Mono<LastSuccessTime> lastSuccessTime = getLastSuccessTimeMono(brand);

        lastSuccessTime.subscribe(x -> {
            String lastTime = x.getLastSuccessTime();
            log.info("*******test********** : " + lastTime);
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            String lastTimeStr = formatter.format(LocalDateTime.parse(lastTime, formatter).minusSeconds(10));
            Flux<Player> savedPlayers = savePlayersFromDbService.savePlayersFromSpecificBrand(brand, lastTimeStr);
            log.debug(":migrateForBrand: saved players for brand = " + brand + " are = " + savedPlayers);
        });

lastSuccessTime содержит '1970-01-01' и i ' Я пытаюсь распечатать его, но, похоже, он этого не делает, не видит, что мне не хватает

спасибо за помощь!

1 Ответ

0 голосов
/ 06 февраля 2020

Я думаю, что у вас есть ошибка в вашем коде: подписавшись на создание потока, но ничего не делая с ним, если вы хотите получить все savePayers, вы должны подписаться на поток и затем распечатать каждый элемент. Вы можете сделать это так. Flux лениво оценивается, поэтому, если вы не подпишетесь на него, вы не получите никакого результата.

  Mono<LastSuccessTime> lastSuccessTime = getLastSuccessTimeMono(brand);

    lastSuccessTime.flatMapMany(x -> {
        String lastTime = x.getLastSuccessTime();
        log.info("*******test********** : " + lastTime);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String lastTimeStr = formatter.format(LocalDateTime.parse(lastTime, formatter).minusSeconds(10));
        Flux<Player> savedPlayers = savePlayersFromDbService.savePlayersFromSpecificBrand(brand, lastTimeStr);
        return savedPlayers;
    })
    .collectList()
    .subscribe(players ->             log.debug(":migrateForBrand: saved players for brand = " + brand + " are = " + players));
...