我想为我的 Web 应用程序使用的休息服务设置连接超时。我正在使用 Spring 的 RestTemplate
与我的服务对话。我做了一些研究,发现并使用了下面的 xml(在我的应用程序 xml 中),我认为它是用来设置超时的。我正在使用 Spring 3.0。
我在这里也看到了同样的问题 Timeout configuration for spring webservices with RestTemplate 但解决方案似乎不那么 _干净_,我更愿意通过 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错误:没有到主机的路由:连接;嵌套异常是java.net.NoRouteToHostException
:没有到主机的路由:连接
URL 不正确,因此 rest 服务返回 404: 等待大约 10 秒并报告以下异常:
org.springframework.web.client.HttpClientErrorException
:404未找到
我的要求需要更短的超时,所以我需要能够更改这些。关于我做错了什么的任何想法?
非常感谢。
原文由 sardo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我终于得到了这个工作。
我认为我们的项目有两个不同版本的 commons-httpclient jar 这一事实没有帮助。一旦我解决了这个问题,我发现你可以做两件事……
在代码中,您可以放置以下内容:
第一次调用此代码时,它将为 --- 使用的
RestTemplate
HttpComponentsClientHttpRequestFactory
类设置超时。因此,由RestTemplate
进行的所有后续调用将使用上面定义的超时设置。或者更好的选择是这样做:
在我的代码中使用
RestOperations
接口并从属性文件中获取超时值的地方。