Spring RestTemplate超时
我想为我的Web应用程序使用的rest服务设置连接超时。我正在使用Spring的RestTemplate与我的服务交谈。我进行了一些研究,发现并使用了下面的xml(在我的应用程序xml中),我认为这是为了设置超时。我正在使用Spring 3.0。
我在这里也看到了同样的问题,使用RestTemplate为Spring Web服务设置超时,但是解决方案似乎不太干净,我更愿意通过Spring config设置超时值
<bean id="RestOperations" class="org.springframework.web.client.RestTemplate"> <constructor-arg>
<bean class="org.springframework.http.client.CommonsClientHttpRequestFactory">
<property name="readTimeout" value="${restURL.connectionTimeout}" />
</bean>
</constructor-arg>
</bean>
看来无论我将readTimeout设置为什么,都会得到以下信息:
网络电缆已断开连接: 等待约20秒,并报告以下异常:
org.springframework.web.client.ResourceAccessException:I / O错误:没有通往主机的路由:connect; 嵌套的异常是java.net.NoRouteToHostException:没有路由到主机:connect
网址不正确,因此REST服务返回404: 等待大约10秒,并报告以下异常:
org.springframework.web.client.HttpClientErrorException:找不到404
我的要求需要更短的超时,因此我需要能够更改这些超时。关于我在做什么错的任何想法吗?
非常感谢。
回答:
我认为我们的项目具有commons-httpclient jar的两个不同版本的事实并没有帮助。整理好之后,我发现你可以做两件事…
在代码中,你可以放置以下内容:
HttpComponentsClientHttpRequestFactory rf = (HttpComponentsClientHttpRequestFactory) restTemplate.getRequestFactory();
rf.setReadTimeout(1 * 1000);
rf.setConnectTimeout(1 * 1000);
首次调用此代码时,它将设置所HttpComponentsClientHttpRequestFactory
使用的类的超时RestTemplate
。因此,所有随后的呼叫RestTemplate
将使用上面定义的超时设置。
或更好的选择是这样做:
<bean id="RestOperations" class="org.springframework.web.client.RestTemplate"> <constructor-arg>
<bean class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
<property name="readTimeout" value="${application.urlReadTimeout}" />
<property name="connectTimeout" value="${application.urlConnectionTimeout}" />
</bean>
</constructor-arg>
</bean>
我RestOperations在代码中使用接口的位置,并从属性文件中获取超时值。
以上是 Spring RestTemplate超时 的全部内容, 来源链接: utcz.com/qa/425902.html