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

Mik*_*ail 9 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();       
    }
Run Code Online (Sandbox Code Playgroud)

但结果我有一个错误.

Timeout on blocking read for 5000 MILLISECONDS
Run Code Online (Sandbox Code Playgroud)

处理程序很简单

 public Mono<ServerResponse> check(ServerRequest request){

       Request request = request.bodyToMono(Request.class).block();
Run Code Online (Sandbox Code Playgroud)

问题出在哪儿 ?但如果我向服务器发送直接请求,一切都可以.

ROC*_*CKY 18

我在运行集成测试时看到类似的问题和异常,其中一些集合了来自多个其他具有数据库访问权限的服务的响应.所以我们在运行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();
        }
Run Code Online (Sandbox Code Playgroud)

  • 无论我设置的超时如何,我总是会超时。但是如果我启动应用程序并直接测试端点,我的 rest api(类似于上面的那个)工作正常 (4认同)
  • 你好,我也面临着同样的问题。即使我设置超时仍然抛出错误。还有其他想法如何解决吗? (2认同)

Mus*_*oub 11

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

例如 :

@AutoConfigureWebTestClient(timeout = "36000")
@SpringBootTest
class MyTestClass {
}
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用 ISO-8601 持续时间格式。36 秒的示例:`@AutoConfigureWebTestClient(timeout = "PT36S")` (3认同)