spring Boot webflux在连续流量中查询数据

wlzqhblo  于 2023-02-04  发布在  Spring
关注(0)|答案(1)|浏览(168)

具有产生随机串的连续通量的以下代码:

@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);
    
        }
    }
}

...其中reactiveDocumentRepository.findLastDocument()返回一个mono,其中包含插入到数据库中的最后一个文档?换句话说,我希望该查询在数据库中连续运行,并始终发布最后插入的记录

4ioopgfo

4ioopgfo1#

在reactive中,你需要使用运算符来构建一个流,当下游(在你的例子中是webflux)订阅流时,这个流将被求值。结果不是立即可用的,你不能只是将它与一个字符串连接起来。reactiveDocumentRepository.findLastDocument()是reactive,你需要使用flatMap而不是map

public Flux getDocuments() {        
    return Flux.interval(Duration.ofSeconds(1))    
            .flatMap(x -> 
                    reactiveDocumentRepository.findLastDocument()
                            .map(d -> "document-" + d.getDescription)
            );
}

相关问题