我有一个使用多个休息客户端的应用程序。每个REST客户端都使用相同的Spring REST模板bean。我想知道是否有办法使用Spring rest模板为每个请求设置超时值?
答案 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/