Как инициализировать данные по умолчанию из базы данных в Spring Webflux SSE Endpoint?

Привет, я только изучаю Spring Webflux и пробую функцию под названием SSE Server Sent Event, мне уже удалось отправить значение объекта в мою конечную точку потоковой передачи, но я не могу инициализировать данные по умолчанию из моей базы данных Mongodb, вот что я делаю:

я создаю класс Sink с именем SinkConfig.java:

      @Configuration
public class SinkConfig {

    @Bean
    public Sinks.Many<StudentDto> sink() {
        return Sinks.many().replay().limit(1);
    }

    @Bean
    public Flux<StudentDto> studentBroadcast(Sinks.Many<StudentDto> sink) {
        return sink.asFlux();
    }
}

тогда в моем сервисе я делаю это:

      @Autowired
private RegistrationRepository registrationRepository;

@Autowired
private Sinks.Many<StudentDto> studentDtoSink;

public Flux<StudentDto> findAll() {
    return registrationRepository.findAll().switchIfEmpty(Flux.empty()).map(x -> new StudentDto(x.get_id(), x.getFirstName(), x.getLastName()));
}

public Mono<StudentDto> save(Student student) {
    return registrationRepository.save(student)
            .map(x -> new StudentDto(x.get_id(), x.getFirstName(), x.getLastName()))
            .doOnNext(this.studentDtoSink::tryEmitNext);
}

как вы можете видеть, каждый раз, когда я сохраняю действие, я буду использовать .doOnNext(this.studentDtoSink::tryEmitNext, это отправит данные объекта моему studentDtoSink. и вот мой контроллер:

      @Autowired
private RegistrationService registrationService;

@Autowired
private Flux<StudentDto> flux;

@GetMapping("/view-all")
public Flux<StudentDto> findAll() {
    return registrationService.findAll();
}

@PostMapping("/save")
public Mono<StudentDto> save(@RequestBody Student student) {
    return registrationService.save(student);
}

@GetMapping(value = "/view-all-stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<StudentDto> findAllStream() {
    flux = registrationService.findAll(); //if i comment this line out, it work without default data
    return flux;
}

как видите, я пытаюсь сначала получить данные из базы данных в конечная точка, но когда я выполняю конечную точку в моем браузере, запрос завершается немедленно, если я удалю эту строку моя конечная точка снова начинает прослушивание, но у меня нет значения в моей базе данных. Мне нужны данные из моей базы данных, и тогда все новые сохраненные данные будут отображаться как новые данные. Как мне это сделать правильно?

0 ответов

Другие вопросы по тегам