【问题标题】:Spring Reactive MongoDB not saving documentSpring Reactive MongoDB不保存文档
【发布时间】:2018-10-02 11:19:25
【问题描述】:

我正在尝试保存一个基本文档,但尽管连接到 mongodb 成功......它似乎不想保存。

春季原木

2018-10-03 00:17:25.998  INFO 10713 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2018-10-03 00:17:26.049  INFO 10713 --- [  restartedMain] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-10-03 00:17:26.106  INFO 10713 --- [ctor-http-nio-1] r.ipc.netty.tcp.BlockingNettyContext     : Started HttpServer on /0:0:0:0:0:0:0:0:8080
2018-10-03 00:17:26.106  INFO 10713 --- [  restartedMain] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port(s): 8080
2018-10-03 00:17:26.112  INFO 10713 --- [  restartedMain] c.l.s.ServiceLegalApplicationKt          : Started ServiceLegalApplicationKt in 3.459 seconds (JVM running for 4.201)
2018-10-03 00:17:26.644  INFO 10713 --- [ntLoopGroup-2-2] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:3, serverValue:4}] to localhost:27017

application.properties

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=legal
spring.data.mongodb.repositories.type=reactive
spring.mongodb.embedded.version=4.0.2

基本接口和类

interface EventRepository: ReactiveMongoRepository<Event, String>

@Document
class Event(id: String, name: String)

尝试简单的保存功能

@Service
class SomeService(val eventRepository: EventRepository)
{
    fun save() = eventRepository.save(Event(UUID.randomUUID().toString(), "hey"))
}

【问题讨论】:

  • 你是如何使用 save() 方法返回的值的?使用 reactiveRepository 你必须订阅它才能看到结果,如果没有人需要这个结果,实际做某事的目的是什么?
  • 哦,废话。那是我的错。完全忘记了订阅。感谢您指出@VladMamaev

标签: spring mongodb kotlin spring-data-mongodb


【解决方案1】:
Mono<Event> response = repository.save(Event(UUID.randomUUID().toString(), "hey"));

保存方式的变化

fun save() = eventRepository.save(Event(UUID.randomUUID().toString(), "hey")).subscribe();

您必须在 Mono 引用上调用 subscribe() 方法才能查看日志或详细信息。

【讨论】:

  • 但是我得到了Disposable,如何从函数返回Mono
【解决方案2】:

为了让您使用subscribe() 操作流式传输终端并同时获得 Mono 结果 - 分为两个单独的操作:

Mono<String> myEvent = eventRepository.save(Event(UUID.randomUUID().toString(), "hey"));
myEvent.subscribe();
return myEvent;

【讨论】:

    猜你喜欢
    • 2020-01-28
    • 2019-06-19
    • 2021-11-21
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2019-10-30
    相关资源
    最近更新 更多