nsa*_*yer 15 java spring apache-httpclient-4.x
我想让Spring IoC配置一个CloseableHttpClient对象并将其注入我的类中,以便可以通过XML完成其配置的自定义.
从我所看到的,HttpClient似乎非常强烈地抵制这种模式.他们希望你做的事情
CloseableHttpClient chc =
HttpClients.custom().set<thing that should be a property>().build();
Run Code Online (Sandbox Code Playgroud)
伊克.
是否有一些制作单例CloseableHttpClientbean的机制我可以使用?
Mat*_*att 41
这似乎对我有用:
<bean id="requestConfigBuilder" class="org.apache.http.client.config.RequestConfig"
factory-method="custom">
<property name="socketTimeout" value="${socketTimeoutInMillis}" />
<property name="connectTimeout" value="${connectionTimeoutInMillis}" />
</bean>
<bean id="requestConfig" factory-bean="requestConfigBuilder" factory-method="build" />
<bean id="httpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder"
factory-method="create">
<property name="defaultRequestConfig" ref="requestConfig" />
</bean>
<bean id="httpClient" factory-bean="httpClientBuilder" factory-method="build" />
Run Code Online (Sandbox Code Playgroud)
这给了我一个"httpClient"bean中的CloseableHttpClient,配置了套接字和连接超时.您应该能够向requestConfigBuilder或httpClientBuilder添加更多属性.
使用Java配置,这很简单
@Bean
public CloseableHttpClient httpClient() {
HttpClientBuilder builder = HttpClientBuilder.create();
builder.setEverything(everything); // configure it
CloseableHttpClient httpClient = builder.build();
}
Run Code Online (Sandbox Code Playgroud)
使用XML配置,它有点复杂.您可以创建自己的FactoryBean实现,例如CloseableHttpClientFactoryBean,将所有调用委托给a HttpClientBuilder和build()内部调用getObject().
public class CloseableHttpClientFactoryBean implements FactoryBean<CloseableHttpClient> {
private HttpClientBuilder builder;
public CloseableHttpClientFactoryBean() {
builder = HttpClientBuilder.create();
}
... // all the setters
// for example
public void setEverything(Everything everything) {
// delegate
builder.setEverything(everything);
}
public CloseableHttpClient getObject() {
return builder.build();
}
}
Run Code Online (Sandbox Code Playgroud)
和配置
<bean name="httpClient" class="com.spring.http.clients.CloseableHttpClientFactoryBean">
<property name="everything" ref="everything"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
每种HttpClientBuilder方法都需要一个setter 方法.
请注意,如果您不需要任何自定义配置,则可以使用factory-method获取默认值CloseableHttpClient
<bean name="httpClient" class="org.apache.http.impl.client.HttpClients" factory-method="createDefault" >
</bean>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23853 次 |
| 最近记录: |