Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
在spring项目中使用httpclient
  • Loading branch information
duqi committed Feb 9, 2017
1 parent 092d60f commit 5a89b5e
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 3 deletions.
20 changes: 17 additions & 3 deletions pom.xml
Expand Up @@ -20,6 +20,10 @@
</plugins>
</build>

<properties>
<spring.version>4.3.2.RELEASE</spring.version>
</properties>

<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
Expand Down Expand Up @@ -47,17 +51,27 @@
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.4.RELEASE</version>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

<dependency>
Expand Down
60 changes: 60 additions & 0 deletions src/main/java/org/java/learn/httpclient/HttpClientFactoryBean.java
@@ -0,0 +1,60 @@
package org.java.learn.httpclient;

import org.apache.commons.codec.Charsets;
import org.apache.http.NoHttpResponseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.ConnectionConfig;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.client.HttpClients;
import org.springframework.beans.factory.FactoryBean;

import java.net.SocketTimeoutException;

/**
* Created by IntelliJ IDEA.
* User: duqi
* Date: 2017/2/9
* Time: 13:54
*/
public class HttpClientFactoryBean implements FactoryBean<HttpClient> {

private static final int DEFAULT_MAX_TOTAL = 512;
private static final int DEFAULT_MAX_PER_ROUTE = 64;
private static final int DEFAULT_CONNECTION_TIMEOUT = 5000;
private static final int DEFAULT_SOCKET_TIMEOUT = 3000;

@Override
public HttpClient getObject() throws Exception {
ConnectionConfig config = ConnectionConfig.custom()
.setCharset(Charsets.UTF_8)
.build();

RequestConfig defaultRequestConfig = RequestConfig.custom()
.setConnectTimeout(DEFAULT_CONNECTION_TIMEOUT)
.setSocketTimeout(DEFAULT_SOCKET_TIMEOUT)
.build();

return HttpClients.custom()
.setMaxConnPerRoute(DEFAULT_MAX_PER_ROUTE)
.setMaxConnTotal(DEFAULT_MAX_TOTAL)
.setRetryHandler((exception, executionCount, context) -> executionCount <= 3 && (exception instanceof NoHttpResponseException
|| exception instanceof ClientProtocolException
|| exception instanceof SocketTimeoutException
|| exception instanceof ConnectTimeoutException))
.setDefaultConnectionConfig(config)
.setDefaultRequestConfig(defaultRequestConfig)
.build();
}

@Override
public Class<?> getObjectType() {
return HttpClient.class;
}

@Override
public boolean isSingleton() {
return true;
}
}
3 changes: 3 additions & 0 deletions src/main/resources/applicationContext.xml
Expand Up @@ -5,4 +5,7 @@
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<context:component-scan base-package="org.java.learn"/>

<bean id="httpClientFactoryBean" class="org.java.learn.httpclient.HttpClientFactoryBean"/>
<!--<bean id="httpClient" factory-bean="httpClientFactoryBean"/>-->
</beans>
27 changes: 27 additions & 0 deletions src/test/java/HttpClientFactoryBeanXmlTest.java
@@ -0,0 +1,27 @@
import org.apache.http.client.HttpClient;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

/**
* Created by IntelliJ IDEA.
* User: duqi
* Date: 2017/2/9
* Time: 14:18
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class HttpClientFactoryBeanXmlTest {

@Resource
HttpClient httpClient;

@Test
public void httpClientAutoWired() throws Exception {
Assert.assertNotNull(httpClient);
}
}

0 comments on commit 5a89b5e

Please sign in to comment.