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

Play WS请求超时问题:已配置超时仍报120000ms读取超时

解决Play WS配置超时不生效的问题

你遇到的java.util.concurrent.TimeoutException: Read timeout to {url} after 120000 ms错误,说明实际生效的是默认2分钟超时,你配置的5分钟超时没起作用,按以下步骤排查:

1. 确认配置是否真的被加载

Play的配置可能因为加载顺序或环境问题没生效,先在代码里注入WSClientConfig打印实际生效的超时值,验证配置是否被读取:

import play.libs.ws.WSClientConfig;
import javax.inject.Inject;

public class YourService {
    @Inject
    public YourService(WSClientConfig wsConfig) {
        // 打印当前生效的超时配置
        System.out.println("Request timeout: " + wsConfig.getRequestTimeout());
        System.out.println("Idle timeout: " + wsConfig.getIdleTimeout());
    }
}

如果输出不是5分钟,说明配置文件没被正确加载:

  • 检查是否当前运行环境使用了其他配置文件(比如application-prod.conf),里面可能覆盖了超时设置;
  • 确认配置文件的语法正确,play.ws.timeout.request = 5 minutes这种写法是合法的,单位支持ms/seconds/minutes。

2. 排查代码中的硬编码超时

如果配置确实加载了,但还是超时,大概率是代码里硬编码了超时时间,覆盖了全局配置。检查发起请求的代码,是否有类似这样的写法:

wsClient.url("{url}")
        .withRequestTimeout(Duration.ofMinutes(2)) // 硬编码2分钟超时,会覆盖配置
        .get()
        .thenApply(response -> {
            // 处理逻辑
        });

如果有,删掉硬编码的.withRequestTimeout(),或者改成读取配置的值:

// 注入WSClientConfig后使用配置的超时
wsClient.url("{url}")
        .withRequestTimeout(wsConfig.getRequestTimeout())
        .get()
        .thenApply(...);

3. 自定义WSClient的特殊情况

如果你是手动创建自定义WSClient实例,而不是用框架注入的默认实例,需要确保创建时传入了正确的配置:

WSClient customClient = new NingWSClient(wsConfig);

如果创建时没传入全局配置,会使用默认的2分钟超时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:01:35