ReactiveMongoRepository没有保存我的数据

时间:2019-07-17 07:22:54

标签: database mongodb spring-boot kotlin reactor

我在springmongonoSQL中是菜鸟。

我已在本地连接到我的mongoDB。

但是我保存实体的尝试一直失败。

val a0 = myEntity(name = "my Entity")
repository.save(a0)

我的存储库扩展了ReactiveMongoRepository<MyEntity, Long>

但是当我将其更改为扩展MongoRepository<MyEntity, Long>时,它就可以工作。

可能是什么问题?

我的数据库实例正在运行并且工作正常。 我猜想它必须与反应性事物有关。

1 个答案:

答案 0 :(得分:0)

如果使用反应式流,则应注意nothing happens until you subscribe

  

在Reactor中,当您编写Publisher链时,默认情况下不会开始将数据泵入其中。取而代之的是,您创建异步过程的抽象描述(这有助于重用和组合)。

     

通过订阅,您将Publisher绑定到Subscriber,从而触发了整个链中的数据流。这是通过内部来自Subscriber的单个请求信号在内部实现的,该请求信号一直向上游传播,一直返回到源Publisher

这意味着,如果您使用ReactiveMongoRepository,则必须订阅响应流。这可以通过在任何subscribe()上使用Publisher方法来完成。例如,使用Java,将是:

reactiveRepository
    .save(myEntity)
    .subscribe(result => log.info("Entity has been saved: {}", result));

此外,如果您编写反应式控制器,Webflux之类的框架将为您处理订阅。使用Java意味着您可以编写如下内容:

@GetMapping
public Mono<MyEntity> save() {
    return reactiveRepository.save(myEntity); // subscribe() is done by the Webflux framework
}

很明显,反应式编程不仅有很多,而且您应该意识到,如果不适应反应式生态系统和使用反应式编程,就不能简单地将MongoRepository交换为ReactiveMongoRepository

Reactor参考指南中有一个Introduction to Reactive Programming章节,可能很有趣。之前引用的文档也来自参考指南的这一章。