提问者:小点点

Spring Bootweb在连续通量中查询数据


具有以下代码,可产生连续的随机字符串流:

@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中的文档的单声道?换句话说,我希望该查询在数据库上连续运行并始终发布最后插入的记录


共1个答案

匿名用户

在响应式中,您需要使用运算符构建流,这些运算符将在下游(在您的情况下是web流)订阅流时进行评估。结果不是立即可用的,您不能只是将其与字符串连接起来。reactiveDocumentReposory. findLastDocument()是响应式的,您需要使用平面图而不是map

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