【发布时间】:2017-03-23 22:56:09
【问题描述】:
我有一个使用多个休息客户端的应用程序。这些 REST 客户端中的每一个都使用相同的 Spring REST 模板 bean。我想知道是否有办法使用 Spring rest 模板设置每个请求的超时值?
【问题讨论】:
标签: spring spring-boot
我有一个使用多个休息客户端的应用程序。这些 REST 客户端中的每一个都使用相同的 Spring REST 模板 bean。我想知道是否有办法使用 Spring rest 模板设置每个请求的超时值?
【问题讨论】:
标签: spring spring-boot
这对我有用...
RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory());
private ClientHttpRequestFactory getClientHttpRequestFactory() {
int timeout = 5000;
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory
= new HttpComponentsClientHttpRequestFactory();
clientHttpRequestFactory.setConnectTimeout(timeout);
return clientHttpRequestFactory;
}
【讨论】:
RestTemplate 实例设置每个请求的超时时间。您是否在其他地方发现 this 是不可能的?
要实现超时调用rest模板,首先你应该创建配置类也使用@Bean注解,然后在类中实现并使用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/
【讨论】:
您还可以修改 SimpleClientHttpRequestFactory。
RestTemplate restTemplate = new RestTemplate();
restTemplate.setRequestFactory(customHttpRequestFactory());
private SimpleClientHttpRequestFactory customHttpRequestFactory() {
SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
simpleClientHttpRequestFactory.setReadTimeout(2000);
simpleClientHttpRequestFactory.setConnectTimeout(2000);
return simpleClientHttpRequestFactory;
}
【讨论】: