具有以下代码,可产生连续的随机字符串流:
@RestController
public class WebFluxController {
private final Random random = new Random();
@CrossOrigin
@GetMapping(value = "/documents")
public Flux getDocuments() {
return Flux.interval(Duration.ofSeconds(1))
.map(x -> "document-" +
random.nextDouble());
}
}
…如何将随机替换为对数据库的查询,该查询将返回最后一条记录的字段,例如:
@RestController
public class WebFluxController {
@Autowired
private ReactiveDocumentRepository reactiveDocumentRepository;
@CrossOrigin
@GetMapping(value = "/documents")
public Flux getDocuments() {
return Flux.interval(Duration.ofSeconds(1))
.map(x -> "document-" +
reactiveDocumentRepository.findLastDocument().map(d->d.getDescription);
}
}
}
…其中reactiveDocumentReposory. findLastDocument()返回一个包含最后插入db中的文档的单声道?换句话说,我希望该查询在数据库上连续运行并始终发布最后插入的记录
在响应式中,您需要使用运算符构建流,这些运算符将在下游(在您的情况下是web流)订阅流时进行评估。结果不是立即可用的,您不能只是将其与字符串连接起来。reactiveDocumentReposory. findLastDocument()
是响应式的,您需要使用平面图
而不是map
。
public Flux getDocuments() {
return Flux.interval(Duration.ofSeconds(1))
.flatMap(x ->
reactiveDocumentRepository.findLastDocument()
.map(d -> "document-" + d.getDescription)
);
}