Как инициализировать данные по умолчанию из базы данных в 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;
}
как видите, я пытаюсь сначала получить данные из базы данных в