You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Rest API请求超时实现引发Cassandra连接问题排查

Spring Boot异步Callable导致Cassandra测试连接异常,超时机制冲突

我基于Spring Boot开发REST微服务,因调用的第三方API响应耗时较长,想实现请求超时机制避免应用崩溃。参考资料显示可通过配置spring.mvc.async.request-timeout并让控制器端点返回Callable来实现,但运行JUnit测试时出现Cassandra连接问题;移除Callable后测试可正常运行,但超时机制失效。

控制器端点代码

@PostMapping("/deposit-accounts")
public Callable<ResponseEntity<DepositResponse>> 
getAccountCapabilities(@Valid @RequestBody DepositRequest request) {
    return () -> {
        final DepositResponse response = depositService.getCapabilities(request);
        if (response.getCapabilities().size() > 1 &&
                response.getCapabilities().stream()
                        .filter(c -> ResponseCodes.INTERNAL_HOST_ERROR.equals(c.getResponseCode())).count() > 0) {
            return ResponseEntity.status(207).body(response);
        }
        return ResponseEntity.ok(response);
    };
}

JUnit测试代码

@Test
@DisplayName("testResponseDelay")
void testResponseDelay() throws Exception {
    String request = readResourceFileToString("payloads/depositaccount/request.json");
    String casAPIResponse = readResourceFileToString("payloads/depositaccount/cas/response.xml");
   
    mockCASApi.enqueue(new MockResponse()
            .setBody(casAPIResponse)
            .addHeader("Content-Type", TEXT_XML_VALUE));

    this.mockMvc
            .perform(post("/payments/capabilities/deposit")
                    .contentType(MediaType.APPLICATION_JSON).content(request))
            .andExpect(status().is(200));
}

超时配置(application.yaml)

mvc:
  async:
    request-timeout: 5000

补充说明:第三方服务调用使用RestTemplate,Cassandra部署在本地用于JUnit测试。

我不确定当前Callable的用法是否正确,也无法理解为何它会引发Cassandra连接问题,恳请指点。

内容的提问来源于stack exchange,提问作者pash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 02:18:26