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

回到顶部