我将这部分代码作为示例:
public SapRestClient(final String scheme, final String host,
final int port, final String username, final String password,
final HttpClientConnectionManager connectionManager,
final RequestConfig requestConfig) {
final BasicCredentialsProvider credentialsProvider =
new BasicCredentialsProvider();
credentialsProvider.setCredentials(authscope, credentials);
final CloseableHttpClient httpClient =
HttpClientBuilder.create().setDefaultCredentialsProvider(credentialsProvider)
.setConnectionManager(connectionManager)
.setDefaultRequestConfig(requestConfig).build();
final HttpComponentsClientHttpRequestFactory requestFactory =
new HttpComponentsClientHttpRequestFactory(httpClient);
final BufferingClientHttpRequestFactory bufferingRequestFactory =
new BufferingClientHttpRequestFactory(requestFactory;
this.restTemplate = new RestTemplate(bufferingRequestFactory);
我会在Spring做这样的事情 . 我写了这段代码:
<bean id="requestConfigBuilder" class="org.apache.http.client.config.RequestConfig"
factory-method="custom">
<property name="socketTimeout" value="5000" />
<property name="connectTimeout" value="5000" />
</bean>
<bean id="requestConfig" factory-bean="requestConfigBuilder"
factory-method="build" />
<bean id="connectionManager"
class="org.apache.http.conn.HttpClientConnectionManager">
<property name="maxTotal" value="30" />
<property name="defaultMaxPerRoute" value="50" />
</bean>
<bean id="credentialsProvider" class="org.apache.commons.httpclient.auth.CredentialsProvider"/>
<bean id="httpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder"
factory-method="create">
<property name="defaultRequestConfig" ref="requestConfig" />
<property name="defaultConnectionManager" ref="connectionManager"/>
<property name="defaultCredentialsProvider" ref="credentialsProvider"/>
</bean>
<bean id="httpClient" factory-bean="httpClientBuilder"
factory-method="build" />
<bean id="requestFactory" factory-bean="httpComponentsClientHttpRequestFactory">
<property name="defaultHttpClient" ref="httpClient"/>
</bean>
<bean id="bufferingRequestFactory" factory-bean="bufferingClientHttpRequestFactory">
<property name="defaultRequestFactory" ref="requestFactory"/>
</bean>
<bean id="bufferingClientHttpRequestFactory" class="org.springframework.http.client.BufferingClientHttpRequestFactory"/>
<bean id="twRestTemplate" class="org.springframework.web.client.RestTemplate">
<constructor-arg>
<ref bean="bufferingRequestFactory" />
</constructor-arg>
<property name="errorHandler" ref="customErrorHandler" />
</bean>
我在一个closeableHttpClient中放置了一个connectionManager(带有连接设置)和一个请求配置器来进行超时管理(我看到了这个链接) . 我把这个bean放在HttpComponentClientHttpRequestFactory中,然后放在BufferingRequestFactory中,最后放在RestTemplate中 .
但是在运行时我得到了这个错误:
WARN [localhost-startStop-1] [CloseAwareApplicationContext]在上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建在类路径资源[jkdsfj-spring中定义的名称为'defaultTwProductSearchService'的bean时出错 . xml]:在设置bean属性'twNavigatorClientGateway'时无法解析对bean'twNavigatorClientGateway'的引用;嵌套异常是org.springframework.beans.factory.BeanCreationException:在类路径资源[jkdsfj-spring.xml]中定义的名称为'defaultTwNavigatorClientGateway'的bean创建错误:在设置bean属性'twRestTemplate'时无法解析对bean'twRestTemplate'的引用;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建类路径资源[joggrouptwconnector-spring.xml]中定义的名为'twRestTemplate'的bean时出错:在设置构造函数参数时无法解析对bean'bufferingRequestFactory'的引用;嵌套异常是org.springframework.beans.factory.BeanCreationException:在类路径资源[jkdsfj-spring.xml]中定义的名称为'bufferingRequestFactory'的bean创建错误:bean的实例化失败;嵌套异常是java.lang.IllegalStateException:bean定义上没有指定bean类
哪里我错了?
1 回答
不确定您使用的是什么版本的 spring 网 . 我看过spring-web.4.x . BufferingClientHttpRequestFactory接受构造函数参数 . 因此,您可以使用constructor-arg创建一个没有工厂bean的bean
您可能必须对HttpCompnentsClientHttpRequestFactory执行相同的操作 .