以下是一个使用httpclient实现的连接池工具类。
1.maven依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
2.定义常用方法接口
HttpResponse get(String uri,Map<String,String> params,Map<String, String> requestHeaders);
HttpResponse post(String uri, Map<String, String> data, Map<String, String> requestHeaders);
HttpResponse post(String uri, String data, Map<String, String> requestHeaders);
HttpResponse put(String uri, String data, Map<String, String> requestHeaders);
HttpResponse put(String uri, Map<String, String> data, Map<String, String> requestHeaders);
HttpResponse delete(String uri);
3.定义抽象类 实现接口,完成httpclient初始化工作
private static final Logger LOG = LoggerFactory.getLogger(AbstractHttpClientExecutor.class);
protected PoolingHttpClientConnectionManager poolConnManager = null;
protected CloseableHttpClient httpClient = null;
protected RequestConfig requestConfig = null;
protected ConnectionKeepAliveStrategy keepAliveStrategy = null;
protected Registry<ConnectionSocketFactory> socketFactory = null;
private ScheduledExecutorService poolMonitor = null;
protected HttpClientConfiguration configuration;
public AbstractHttpClientExecutor() {
configuration = new HttpClientConfiguration();
init();
}
public AbstractHttpClientExecutor(HttpClientConfiguration configuration) {
if (configuration != null) {
this.configuration = configuration;
}
init();
}
protected void init() {
try {
initSocketFactory();
initPool();
initRequestConfig();
initKeepAliveStrategy();
initHttpClient();
initPoolMoniter();
} catch (Exception e) {
LOG.error("init httpclient error,exceptionInfo:" + ExceptionUtils.getStackTrace(e));
throw new HttpClientException("init httpclient error");
}
}
private void initPoolMoniter() {
if (poolMonitor != null) {
poolMonitor.shutdownNow();
}
Integer idleCheckInterval = configuration.getIdleCheckInterval();