当前位置: 首页 > 知识库问答 >
问题:

Spring Webflux中阻止读取5000毫秒超时

长孙阳成
2023-03-14

我为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();

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

共有3个答案

能帅
2023-03-14

有了WebTestClient,您可以使用AutoConfigureWebTestClient(timeout=“36000”),超时值由您选择。尤其要考虑第三方服务的响应时间。

蒯华彩
2023-03-14

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

例如:

@AutoConfigureWebTestClient(timeout = "36000")
@SpringBootTest
class MyTestClass {
}
劳彦
2023-03-14

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

@Autowired
private WebTestClient webTestClient;

@BeforeEach
public void setUp() {
    webTestClient = webTestClient.mutate()
                                 .responseTimeout(Duration.ofMillis(30000))
                                 .build();
}
 类似资料:
  • 问题内容: 我研究了许多有用的线程和一些教程,但是仍然存在一些问题,这些问题应该非常简单。作为参考,这里是我细读的一些线程: 无论如何,我有一个问题。如果我收到数据,我的代码可以正常工作。如果不这样做,则read()函数将停顿,退出程序的唯一方法是使用kill -9(注意:我使用信号处理来发信号通知线程读取串行数据以终止。这不是罪魁祸首,即使我删除了信号处理,read()调用仍然停止。我正在尝试做

  • 这个问题发生在我通过Spring boot 2.0.0使用Spring webflux的项目上。M3.以下是项目的依存关系, 我有一个REST API,代码如下: 代码工作正常。使用Postman调用API时,它会返回正确的结果。 我有如下集成测试代码: 但是测试失败抛出错误消息,如下所示: 关于如何解决这个问题有什么建议吗?

  • 问题内容: 我正在编写一个赛车应用程序,想要将大量毫秒转换为minutes:seconds.milliseconds(例如)。目前,我只是通过数学()进行运算,然后求余数并进一步除法,依此类推,但是我发现它时不时关闭1毫秒。我知道这听起来似乎没什么大不了的,但是我试图找到和的平均值,然后返回,这意味着它输入不正确,而应用程序的其余部分无法处理。 有没有一种方法使用或格式化毫秒到MM或类似的东西:s

  • 当且仅当相同的项目在最后x毫秒内发射时,我想防止发射发生。我已经查看了油门和防抖操作符,但我不确定它们是否可以在这里帮助我。我可以使用其他操作符吗,或者我可以以某种方式组合它们吗?

  • 我正在尝试使用Java开发2D游戏。到目前为止,我已经设法将游戏设置为使用全屏独占模式,并在自定义线程中进行活动渲染。我决定使用的游戏循环是固定时间步长变量渲染类型。这种类型的游戏循环应该尽可能快地渲染设备可以处理,我对此并不完全满意。所以我试图使用来限制帧速率。 如果我关闭所有渲染,并简单地在游戏循环中更新游戏,< code>Thread.sleep(1)大约在< code>1 ms内成功Hib

  • 问题内容: 我正在使用毫秒在Java中进行一些日期计算,并注意到以下问题: 我知道1年 大约 是31,556,952,000毫秒,所以我的乘法不知何故。 谁能指出我做错了什么?我应该使用很长时间吗? 问题答案: 我应该使用很长时间吗? 是。问题是,由于等等都是s,当您将它们相乘时会得到一个。你是转换到一个,但只有 后 的乘法已经导致了错误的答案。 要解决此问题,您可以将第一个强制转换为: