Spring boot 弹簧反应式单声道:与弹簧执行器的可选冲突
我正在将json数组响应映射到reactor world,但存在如下问题:Spring boot 弹簧反应式单声道:与弹簧执行器的可选冲突,spring-boot,reactive-programming,spring-webflux,spring-actuator,Spring Boot,Reactive Programming,Spring Webflux,Spring Actuator,我正在将json数组响应映射到reactor world,但存在如下问题: val responses = configurationClient.getData() // return json array object .flatMap { it.bodyToMono(object : ParameterizedTypeReference<GeneralResponse<Array<ObjectResponse>>>()
val responses = configurationClient.getData() // return json array object
.flatMap { it.bodyToMono(object : ParameterizedTypeReference<GeneralResponse<Array<ObjectResponse>>>() {})
}
.map { it.data }
.blockOptional() // exception this line
.orElse(emptyArray())!!
我很确定Mono和Spring执行器之间存在冲突management.endpoints.enabled默认为true
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:886)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:790)
... 20 common frames omitted
Caused by: java.lang.IllegalStateException: Timeout on blocking read for 60000 MILLISECONDS
at reactor.core.publisher.BlockingOptionalMonoSubscriber.blockingGet(BlockingOptionalMonoSubscriber.java:162)
at reactor.core.publisher.Mono.blockOptional(Mono.java:1755)
注意
configurationClient.getData()
这只是一个GET请求返回200-[{…}]
- 如果我用的话,一切都能用 management.endpoints.enabled默认值=false
- 问题解决了
根本原因:
这不是Mono:block可选或单独使用弹簧执行器的缺陷
此配置management.endpoints.enabled默认值=true与现有执行器端点配置冲突
解决方案:
清理弹簧执行器配置属性以避免此冲突然后Mono:Block可选工作正常什么是configurationClient?得到的异常是什么?configurationClient.getData()//返回json对象这将返回一个json对象数组
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:886)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:790)
... 20 common frames omitted
Caused by: java.lang.IllegalStateException: Timeout on blocking read for 60000 MILLISECONDS
at reactor.core.publisher.BlockingOptionalMonoSubscriber.blockingGet(BlockingOptionalMonoSubscriber.java:162)
at reactor.core.publisher.Mono.blockOptional(Mono.java:1755)