如何使用Spring REST模板为每个请求设置超时?

时间:2017-03-23 22:56:09

标签: spring spring-boot

我有一个使用多个休息客户端的应用程序。每个REST客户端都使用相同的Spring REST模板bean。我想知道是否有办法使用Spring rest模板为每个请求设置超时值?

3 个答案:

答案 0 :(得分:2)

这对我有用......

RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());

private ClientHttpRequestFactory getClientHttpRequestFactory() {
    int timeout = 5000;
    HttpComponentsClientHttpRequestFactory clientHttpRequestFactory
      = new HttpComponentsClientHttpRequestFactory();
    clientHttpRequestFactory.setConnectTimeout(timeout);
    return clientHttpRequestFactory;
}

答案 1 :(得分:0)

您还可以修改SimpleClientHttpRequestFactory。

    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setRequestFactory(customHttpRequestFactory());

    private SimpleClientHttpRequestFactory customHttpRequestFactory() {
        SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
        simpleClientHttpRequestFactory.setReadTimeout(2000);
        simpleClientHttpRequestFactory.setConnectTimeout(2000);
        return simpleClientHttpRequestFactory;
    }

答案 2 :(得分:0)

要实现超时调用rest模板,首先应该创建还与@Bean注释一起使用的config类,然后在类中实现并使用RestTemplateConfig进行调用。

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate(clientHttpRequestFactory());
    }

    private ClientHttpRequestFactory clientHttpRequestFactory() {
        HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory();
        clientHttpRequestFactory.setConnectionRequestTimeout(4000);
        clientHttpRequestFactory.setReadTimeout(4000);
        clientHttpRequestFactory.setConnectTimeout(4000);
        return clientHttpRequestFactory;
    }
}

但是我建议您使用Apache HttpClient,您可以管理连接池,保持活动状态,空闲监视器以及创建自定义错误处理程序。您可以检查链接:https://springframework.guru/using-resttemplate-with-apaches-httpclient/