配置使用連線池的httpClient
阿新 • • 發佈:2019-01-23
httpclient版本:
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.1</version> </dependency>
spring配置如下:
<bean id="pollingConnectionManager" class="org.apache.http.impl.conn.PoolingHttpClientConnectionManager"> <property name="maxTotal" value="10" /> <property name="defaultMaxPerRoute" value="5" /> </bean> <bean id="httpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder" factory-method="create"> <property name="connectionManager" ref="pollingConnectionManager" /></bean> <bean id="httpClient" factory-bean="httpClientBuilder" factory-method="build" /> <!-- --> <bean id="clientHttpRequestFactory" class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory"> <constructor-arg ref="httpClient" /> <property name="connectTimeout"value="30000" /> <property name="readTimeout" value="30000" /> </bean>
配置帶有連線池的org.springframework.web.client.RestTemplate
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> <constructor-arg ref="clientHttpRequestFactory" /> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.StringHttpMessageConverter" /> <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /> <bean class="org.springframework.http.converter.FormHttpMessageConverter" /> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> <bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter" /> </list> </property> </bean>基於註解的httpclient配置,在帶有@Configuration的類中編寫如下程式碼:
@Bean(name = "poolingHttpClientConnectionManager")
public PoolingHttpClientConnectionManager poolingHttpClientConnectionManager() {
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();
poolingHttpClientConnectionManager.setMaxTotal(10);
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(5);
return poolingHttpClientConnectionManager;
}
@Bean(name = "httpClientBuilder")
public HttpClientBuilder httpClientBuilder() {
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
httpClientBuilder.setConnectionManager(poolingHttpClientConnectionManager());
return httpClientBuilder;
}
@Bean(name = "httpClient")
public CloseableHttpClient httpClient() {
return httpClientBuilder().build();
}