Spring mvc Spring RestTemplate-如何设置连接超时和读取超时
我使用的是Spring3.0.5版本的RestTemplate 有人能帮我吗?如何为每个请求设置connecttimeout和readTimeout值 但在最新版本中,有一个使用HttpComponents客户端HttpRequestFactory类的解决方案。但我需要使用spring.web.3.0.5版本,您可以在Spring mvc Spring RestTemplate-如何设置连接超时和读取超时,spring-mvc,Spring Mvc,我使用的是Spring3.0.5版本的RestTemplate 有人能帮我吗?如何为每个请求设置connecttimeout和readTimeout值 但在最新版本中,有一个使用HttpComponents客户端HttpRequestFactory类的解决方案。但我需要使用spring.web.3.0.5版本,您可以在 org.springframework.http.client.HttpComponentsClientHttpRequestFactory 或者在另一个ClientHttpR
org.springframework.http.client.HttpComponentsClientHttpRequestFactory
或者在另一个ClientHttpRequestFactory实现中
要将其配置为RestTemplate使用
restTemplate.setRequestFactory
或者将其配置为bean属性。您可以使用替代解决方案(spring_web-3.0.5的问题),如
private void setTimeout(RestTemplate restTemplate, int timeout) {
//Explicitly setting ClientHttpRequestFactory instance to
//SimpleClientHttpRequestFactory instance to leverage
//set*Timeout methods
restTemplate.setRequestFactory(new SimpleClientHttpRequestFactory());
SimpleClientHttpRequestFactory rf = (SimpleClientHttpRequestFactory) restTemplate
.getRequestFactory();
rf.setReadTimeout(timeout);
rf.setConnectTimeout(timeout);
}
spring RestTemplate类通过构造CommonClientHttPrequestFactory在内部使用HttpClient.java(commons-httpClients-3.1.jar),因此您可以将其配置为设置属性connectionTimeOut和soTimeout。查看配置
<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
<constructor-arg>
<bean class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">
<property name="params">
<bean class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
<property name="connectionTimeout" value="2000" />
<!-- <property name="soTimeout" value="2000" />
soTimeout is same as readTimeout which is used for socket timeout that waiting for data -->
</bean>
</property>
</bean>
</constructor-arg>
</bean>
<bean id="httpComponentsClientHttpRequestFactory"
class="org.springframework.http.client.CommonsClientHttpRequestFactory">
<constructor-arg ref="httpClient" />
<property name="readTimeout" value="2000"/>
</bean>
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<constructor-arg ref="httpComponentsClientHttpRequestFactory" />
</bean>
我正在使用Spring 5.2,并获得了为RestTemplate对象设置读取和连接超时的干净方法:
@Bean
公共RestTemplate RestTemplate(RestTemplateBuilder){
返回生成器
.setConnectTimeout(持续时间.毫秒(connectTimeoutMillis))
.setReadTimeout(持续时间为毫秒(readTimeoutMillis))
.build();
}
在我的版本中,这些方法不可用。请澄清您使用的是什么版本?您的默认请求工厂可能不是SimpleClientHttpRequestFactory。在这种情况下,您可能还会遇到运行tim问题。因此,在调用我解释的方法之前,请将RestTemplate的requestFactory设置为SimpleClientHttpRequestFactory作为RestTemplate.setRequestFactory(新的SimpleClientHttpRequestFactory()),我们使用的是Spring-web 3.0.5版本,因此,在上述方法不可用的情况下,RestTemplate可能正在使用和ClientHttpPrequestFactory的实例,而不是SimpleClientHttpRequestFactory。您可以尝试在这个方法的开头显式地设置它。我将编辑上面的代码。你现在可以试试。请注意,SimpleClientHttpRequestFactory适用于3.0以后的版本,因此您不会遇到任何问题。是的,Balaji SimpleClientHttpRequestFactory适用于3.0版。向前。但在该版本中,rf.setReadTimeout(超时);设置连接超时(超时);方法不可用。有人知道如何获取系统超时吗?SimpleClientHttpRequestFactory使用-1值,这意味着不是无限的,而是系统默认值。
@Configuration
public class AppConfig {
@Bean
public RestTemplate restTemplate() {
var factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(3000);
factory.setReadTimeout(3000);
return new RestTemplate(factory);
}
}