在Spring WEBLUX中阻止读取5000 MILLISECONDS的超时

时间:2017-11-14 13:23:51

标签: spring-webflux

我为Handler(spring weblux)写了一个测试

试验:

@Test
    public void checkServicesHandlerTest(){
      Request request = new Request();
        request.setMsisdn("ffdfdfd");

        this.testClient.post().uri("/check")
                .body(Mono.just(request), Request.class).exchange().expectStatus().isOk();       
    }

但结果我有一个错误。

Timeout on blocking read for 5000 MILLISECONDS

处理程序很简单

 public Mono<ServerResponse> check(ServerRequest request){

       Request request = request.bodyToMono(Request.class).block();

问题出在哪里?但如果我向服务器发送直接请求,一切正常。

2 个答案:

答案 0 :(得分:12)

我在运行集成测试时看到了类似的问题和异常,其中一些集合了来自多个其他具有数据库访问权限的服务的响应。所以我们在运行Integration测试时间歇地看到这个问题。我们在Gradle中使用Spring Boot 2.0.0.RC1和Junit 5。我这样做是为了解决这个问题。关键是改变webclient,最坏情况下响应超时为30秒。

    @Autowired
    private WebTestClient webTestClient;

        @BeforeEach
        public void setUp() {
         webTestClient = webTestClient
                            .mutate()
                            .responseTimeout(Duration.ofMillis(30000))
                            .build();
        }

答案 1 :(得分:7)

您可以使用注释@AutoConfigureWebTestClient(timeout = "36000")覆盖超时。

例如:

@AutoConfigureWebTestClient(timeout = "36000")
@SpringBootTest
class MyTestClass {
}