spring webflux - 如何以1秒的间隔从数据库中获取所有数据?
spring webflux - how to get all data from the database with an interval of 1 second?
请告诉我。
我的 MongoDB 中有 4 条记录。好的。
我正在为当前任务使用 Reactive Spring。
如果我收到此请求,我将从我的数据库中获取所有数据(4 条记录):
@GetMapping(value = "/stream/positions", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Position> streamAllPositions() {
return positionRepository.findAll();
}
我想指定 1 秒的时间间隔,我将以此为间隔从数据库接收所有记录(4 秒内有 4 条记录)。
那些。我将从数据库中收到第一条记录,一秒钟后我将从数据库中收到第二条记录,一秒钟后我将从数据库中收到第三条记录,再过一秒钟我将从数据库中收到第四条记录。
我尝试根据每秒生成一次的一些默认值来执行此操作。它工作正常。
// Get default value every 1 second
@GetMapping(value = "/stream/persons", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Person> emitPersons() {
return Flux.interval(Duration.ofSeconds(1))
.map(val -> new Person( 1, Sex.MAN, "default", "default", 30, "default"));
}
但我需要从我的数据库中获取真实数据(不是一次全部,并且每条记录分别间隔 1 秒)。
告诉我,我该如何实现?
谢谢
尝试在检索过程中添加超时。
您可以使用 delayElements
运算符:
@GetMapping(value = "/stream/positions", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Position> streamAllPositions() {
return positionRepository.findAll().delayElements(Duration.ofSeconds(1));
}
请告诉我。
我的 MongoDB 中有 4 条记录。好的。 我正在为当前任务使用 Reactive Spring。
如果我收到此请求,我将从我的数据库中获取所有数据(4 条记录):
@GetMapping(value = "/stream/positions", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Position> streamAllPositions() {
return positionRepository.findAll();
}
我想指定 1 秒的时间间隔,我将以此为间隔从数据库接收所有记录(4 秒内有 4 条记录)。 那些。我将从数据库中收到第一条记录,一秒钟后我将从数据库中收到第二条记录,一秒钟后我将从数据库中收到第三条记录,再过一秒钟我将从数据库中收到第四条记录。
我尝试根据每秒生成一次的一些默认值来执行此操作。它工作正常。
// Get default value every 1 second
@GetMapping(value = "/stream/persons", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Person> emitPersons() {
return Flux.interval(Duration.ofSeconds(1))
.map(val -> new Person( 1, Sex.MAN, "default", "default", 30, "default"));
}
但我需要从我的数据库中获取真实数据(不是一次全部,并且每条记录分别间隔 1 秒)。
告诉我,我该如何实现? 谢谢
尝试在检索过程中添加超时。
您可以使用 delayElements
运算符:
@GetMapping(value = "/stream/positions", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Position> streamAllPositions() {
return positionRepository.findAll().delayElements(Duration.ofSeconds(1));
}