在Spring Webflow中阻止读取5000毫秒的超时

2022-04-06 00:00:00 java spring-webflux

我为Handler(Spring Webflow)编写了一个测试

@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();

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


解决方案

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

@Autowired
private WebTestClient webTestClient;

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

相关文章