使用Spring的RestTemplate时,默认的超时值是无限的。

默认情况下,RestTemplate使用SimpleClientHttpRequestFactory,然后使用HttpURLConnection。

默认情况下为HttpURLConnection的超时时间为0 - 即无限的,除非它已经被设置这些属性:

-Dsun.net.client.defaultConnectTimeout=TimeoutInMiliSec 
-Dsun.net.client.defaultReadTimeout=TimeoutInMiliSec 

 

SimpleClientHttpRequestFactory 源码。

public class SimpleClientHttpRequestFactory implements ClientHttpRequestFactory, AsyncClientHttpRequestFactory {
    private static final int DEFAULT_CHUNK_SIZE = 4096;
    private Proxy proxy;
    private boolean bufferRequestBody = true;
    private int chunkSize = 4096;
    private int connectTimeout = -1;
    private int readTimeout = -1;
    private boolean outputStreaming = true;
    private AsyncListenableTaskExecutor taskExecutor;
    //...
    public void setConnectTimeout(int connectTimeout) {
        this.connectTimeout = connectTimeout;
    }
    //...
    public void setReadTimeout(int readTimeout) {
        this.readTimeout = readTimeout;
    }
}

其 setConnectTimeout 和 setReadTimeout 方法,且默认值为 -1。

设置超时时间:

        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(60000);
        factory.setReadTimeout(300000);
        this.restTemplate = new RestTemplate(factory);

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐