我正在尝试弄清楚如何使用 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/