java - 如何使用 spring 5 响应式(Reactive)存储库以“即发即忘”模式进行保存

标签 java spring reactive-programming

我正在尝试弄清楚如何使用 spring 5 ReactiveCrudRepository 在即发即忘模式下进行保存(例如 mongo)。

代码很简单

public Mono<MyObject> saveObject(Mono<MyObject> mono) {
    return mono.flatMap(objectRepository::save);
}

事实是我不需要读取返回的值,并且在响应式(Reactive)世界中,读取操作会触发保存。

我已经尝试过了 objectService.saveObject(Mono.just(object)).block(); 它工作得很好,但它阻塞了:D

我想知道如何正确地做到这一点。 (或者如果这只是一个坏主意)

谢谢朱利安

最佳答案

objectService.saveObject(Mono.just(object)).subscribe(); 

您需要一个可以触发该操作的操作。 .block()是一种方法,但这是一个坏主意。一旦你“阻止”,你就不再处于 react 世界了。

如果您对该方法返回的值不感兴趣 - 您可以使用空订阅方法 - 它只会触发操作。

即使我对这个值不感兴趣,我也会使用 Mono.subscribe(Consumer<? super Person> consumer, Consumer<? super Throwable> errorConsumer, Runnable completeConsumer)重载只是为了记录操作的结果:

objectService.saveObject(Mono.just(object)).subscribe(null, 
                                                      error -> logger.error(error), 
                                                      () -> logger.info("completed"));

关于java - 如何使用 spring 5 响应式(Reactive)存储库以“即发即忘”模式进行保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45330848/

相关文章:

spring - 如何对 spring @Transactional 是否存在进行单元测试?

java - Spring MVC - 在 DispatcherServlet 中未找到带有 URI [/webstore/] 且名称为 'DefaultServlet' 的 HTTP 请求的映射

objective-c - react 性 cocoa : eliminate state in subscribeNext: block

java - vaadin & Spring 启动 : compiled widgetset is missed in jar package

java - @JsonSerialize 和 @JsonDeserialize 包含在注释中时不起作用

java - Google App Engine + Jersey + JSP 结果为 NOT_FOUND

javascript - 根据另一个 Observable 的过去值过滤一个 Observable

java - WebLogic "Exceeded stated content length"错误

java - UnsatisfiedDependencyException : Error creating bean with name

system.reactive - RX 中 Elm's Signal's (Conal's Behaviors's) 的等价物是什么? RX有没有这样的概念?