我想不使用block()/ blockFirst()/ blockLast()将单声道转换为对象java。请告诉我转换方式。
答案 0 :(得分:1)
在Spring Boot 2中使用ReactiveMongoDbRepository和WebFlux在MongoDb文档/模型上生成序列/ id时,我遇到了类似的错误。我已经使用.toFuture().get()
处理了它,作为对非阻塞方法/函数的承诺。 / p>
@Override
public long generateSequence(final String sequenceName) throws InterruptedException, ExecutionException {
return mongoOperations.findAndModify(new Query(Criteria.where("_id").is(sequenceName)),
new Update().inc("sequence", 1), DatabaseSequence.class).doOnSuccess(object -> {
logger.debug("databaseSequence is evaluated: {}", object);
}).toFuture().get().getSequence();
}
答案 1 :(得分:0)
官方路径为block()
,这应该警告您可能做错了,因为阻止非阻止系统就像是在用脚射击自己。
实际上是如此之多,以至于我们最近在使用这些API时抛出异常,从而禁止在Reactor的某些非阻塞Schedulers
上这样做:
java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking, which is not supported in thread parallel-1
如果您真的很喜欢在脚上开枪,那么总有.toFuture().get()
... ¯\_(ツ)_/¯
的反模式解决方案