使用RestTemplate的spring webservices的超时配置

我想在客户端配置使用RestTemplate的spring webservices的超时。 我尝试了以下配置:

             

但是当我启动tomcat时,我有一个NoClassDefFoundError:

 06 févr. 2012 10:43:43,113 [ERROR,ContextLoader] Context initialization failed java.lang.NoClassDefFoundError: org/apache/commons/httpclient/HttpMethodBase 

但是我在我的pom.xml中包含了commons-httpclient:

   commons-httpclient commons-httpclient 3.1 </dependency 

知道如何做/解决这个问题吗?

提前致谢 !

Snicolas的回答几乎对我有用,只需改变演员类:

 RestTemplate restTemplate = new RestTemplate(); ((SimpleClientHttpRequestFactory)restTemplate.getRequestFactory()).setReadTimeout(1000*30); 

您还可以设置connect timeOut:

 ((SimpleClientHttpRequestFactory)restTemplate.getRequestFactory()).setConnectTimeout(1000*30); 

这对我有用

 ( (HttpComponentsClientHttpRequestFactory) getRestTemplate().getRequestFactory() ).setReadTimeout( 120 * 1000 ); 

我在android版本的android安卓模板中使用它。


默认值为60 * 1000

我有同样的问题,并首先尝试通过修改Spring配置来修复它,但我的尝试都是不成功的。

最后,我通过设置以下JVM系统属性来部分修复它:sun.net.client.defaultConnectTimeout

sun.net.client.defaultReadTimeout

(关于它们的更多细节,请点击该链接: http : //docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html )

首先,我使用“自制”配置bean注入存储在属性文件中的“连接超时”和“读取超时”的自定义值:

   ...   ...  

然后,我使用System.setProperty(…)方法设置JVM系统属性,如下所示:

  System.setProperty(propName, value); 

我只剩下一个麻烦了:sun.net.client.defaultConnectTimeout中设置的值似乎没有被考虑在内。 在做了一些测试之后,我意识到当我尝试通过代理服务器(在我的情况下是Squid)到达目标主机时会发生这种情况。

但是,使用该设置方法不方便:超时设置将用于所有进一步的请求

问候

我有同样的需要能够为webservice消费设置超时,我只是用其他spring conf解决它。

首先使用下面的配置,我遇到了与@jsebFrank相同的问题(java.lang.NoClassDefFoundError:org / apache / commons / httpclient / HttpMethodBase)

          

但是,正如Spring支持在此解释的那样(在第16.5节“超时处理”中),您可以使用SimpleClientHttpRequestFactory请求工厂(这是Spring restTemplate的默认工厂)。

使用它,我不再有问题了: