美文网首页Java技术日志云时代架构
HttpClient实战三:Spring整合HttpClient

HttpClient实战三:Spring整合HttpClient

作者: 梁朋举 | 来源:发表于2017-12-01 22:29 被阅读1071次

    简介

    在微服务架构或者REST API项目中,使用Spring管理Bean是很常见的,在项目中HttpClient使用的一种最常见方式就是:使用Spring容器XML配置方式代替Java编码方式进行HttpClient连接池的管理,然后将HttpClient的doGet()和doPost()等操作封装成工具类或者Service注入到其他服务中进行调用。

    Spring集成HttpClient过程

    首先创建一个使用Spring的web项目,在Resources资源文件中添加springContext-httpclient.xml文件

    springContext-httpclient.xml

    然后,创建属性文件httpclient.properties

    httpclient.properties
    http.maxTotal=200
    http.defaultMaxPerRoute=20
    http.connectTimeout=1000
    http.connectionRequestTimeout=500
    http.socketTimeout=10000
    http.staleConnectionCheckEnabled=true
    

    最后,在启动Spring容器时,加载属性文件和springContext-httpclient.xml配置文件即可。

    springContext-httpclient.xml配置文件解析

    1. 创建连接池管理器对象,并设置最大连接数和每个主机地址并发数,下图所示配置bean的id=httpClientConnectionManager,即对应使用Java代码创建的对象cm。

    创建连接池管理器bean

    2.创建HttpClient对象并配置请求参数
    HttpClient接口和CloseableHttpClient实现类层次结构

    HttpClients源码中使用custom()方法构建HttpClientBuilder对象

    HttpClients源码

    HttpClientBuilder实现在build()方法获取HttpClient对象,先从连接池中获取,如果连接池为空就进行一系列默认的配置并创建连接池对象;如果连接池不为空,就判断连接的可重用性,获取有效连接。HttpClientBuilder部分源码如下:

    HttpClientBuilder部分源码

    创建httpClientBuilder的过程如下:

    image.png

    请求参数RequestConfig的配置如下:

    请求参数RequestConfig

    3.开启线程定时清理无效连接

    image.png

    总结

    Spring整合HttpClient连接池的过程很简单,其实就是将《HttpClient实战二》中使用Java代码方式实现的HttpClient连接池方式,修改成Spring容器管理Bean的方式,这样就不必每次都创建一个信息连接池对象,而是从Spring容器中注入即可。


    本订阅号提供Java相关技术分享,从Java编程基础到Java高级技术,从JavaWeb技术基础Jsp、Servlet、JDBC到SSH、SSM开发框架,从REST风格接口设计到分布式项目实战。剖析主流开源技术框架,用亲身实践来谱写深度Java技术日志。“

    欢迎关注 Java技术日志 微信订阅号

    相关文章

      网友评论

      • 冬瓜蔡:你好,这里如何设置Connection: close,记得默认的应该是Connection: Keep-Alive
        冬瓜蔡:没理解,那个线程应该是清理过期连接的把,我现在是想要把每次http请求的请求头都设置成Connection: close这种状态,这样每次请求都可以创建一个新的tcp连接
        梁朋举:最后一项配置,清理无效连接,配置了一个线程的
      • Coffeelong:默认的httpClient创建方式也构建了一个连接池吗?只是超时等参数的配置都是默认的
        梁朋举:参看实战1,单纯的创建HttpClients是不创建连接池的

      本文标题:HttpClient实战三:Spring整合HttpClient

      本文链接:https://www.haomeiwen.com/subject/spxgbxtx.html