我想使用RestTemplate为客户端配置spring webservices的超时。我尝试了以下配置:
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<constructor-arg>
<bean class="org.springframework.http.client.CommonsClientHttpRequestFactory">
<property name="readTimeout" value="10000" />
</bean>
</constructor-arg>
<property name="messageConverters">
<list>
<ref bean="stringHttpMessageConverter" />
<ref bean="marshallingHttpMessageConverter" />
</list>
</property>
</bean>
但是当我启动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:
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency
我知道如何做/解决这个问题?
提前致谢!
答案 0 :(得分:9)
Snicolas的答案几乎对我有用,只需改变演员级别:
RestTemplate restTemplate = new RestTemplate();
((SimpleClientHttpRequestFactory)restTemplate.getRequestFactory()).setReadTimeout(1000*30);
您也可以设置connect timeOut:
((SimpleClientHttpRequestFactory)restTemplate.getRequestFactory()).setConnectTimeout(1000*30);
答案 1 :(得分:4)
这对我有用
( (HttpComponentsClientHttpRequestFactory) getRestTemplate().getRequestFactory() ).setReadTimeout( 120 * 1000 );
我在Android安卓模板的android版本中使用它。
默认值为60 * 1000
答案 2 :(得分:0)
我遇到了同样的问题,并首先尝试通过修改Spring配置来修复它 但我的尝试都没有成功。
最后,我通过设置以下JVM系统属性来部分修复它: sun.net.client.defaultConnectTimeout
sun.net.client.defaultReadTimeout
(请点击该链接了解有关它们的详细信息:http://docs.oracle.com/javase/1.4.2/docs/guide/net/properties.html)
首先,我为“连接超时”注入自定义值 和“读取超时”存储在属性文件中,使用“自制”配置bean:
<bean id="rmProperties" class="com.mydomain.myapp.myConfigBean" scope="singleton">
...
<property name="httpRequestConnectTimeout" value="${httpRequestConnectTimeout}" />
<property name="httpRequestReadTimeout" value="${httpRequestReadTimeout}" />
...
</bean>
然后,我使用System.setProperty(...)方法设置JVM系统属性,如下所示:
System.setProperty(propName, value);
我只剩下一个问题:在sun.net.client.defaultConnectTimeout中设置的值 似乎没有被考虑在内。 在做了一些测试之后,我意识到当我尝试通过代理服务器(在我的情况下是Squid)到达我的目标主机时会发生这种情况。
但是,使用该设置方法不方便:超时设置将用于所有进一步的请求
此致
答案 3 :(得分:0)
我有同样的需要,可以为webservice消费设置超时,我只是用其他spring conf解决它。
首先使用下面的配置,我遇到与@jsebFrank相同的问题(java.lang.NoClassDefFoundError:org / apache / commons / httpclient / HttpMethodBase)
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<constructor-arg>
<bean
class="org.springframework.http.client.CommonsClientHttpRequestFactory">
<property name="connectTimeout" value="10000" />
<property name="readTimeout" value="10000" />
</bean>
</constructor-arg>
</bean>
但是,当Spring支持解释here时(在第16.5节“超时处理”中),您可以使用SimpleClientHttpRequestFactory请求工厂(这是Spring restTemplate的默认工厂)。
使用它,我不再有问题了:
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<constructor-arg>
<bean
class="org.springframework.http.client.SimpleClientHttpRequestFactory">
<property name="connectTimeout" value="10000" />
<property name="readTimeout" value="10000" />
</bean>
</constructor-arg>
</bean>