关于spring:精讲RestTemplate第2篇多种底层HTTP客户端类库的切换

8次阅读

共计 2046 个字符,预计需要花费 6 分钟才能阅读完成。

本文是精讲 RestTemplate 第 2 篇,前篇的 blog 拜访地址如下:

  • 精讲 RestTemplate 第 1 篇 - 在 Spring 或非 Spring 环境下如何应用

RestTemplate 只是对其余的 HTTP 客户端的封装,其自身并没有实现 HTTP 相干的根底性能。其底层实现是能够配置切换的,咱们本大节就带着大家来看一下 RestTemplate 底层实现,及如何实现底层根底 HTTP 库的切换。

一、源码剖析

RestTemplate 有一个十分重要的类叫做 HttpAccessor,能够了解为用于 HTTP 接触拜访的根底类。下图为源码:

从源码中咱们能够剖析出以下几点信息

  • RestTemplate 反对至多三种 HTTP 客户端库。

    • SimpleClientHttpRequestFactory。对应的 HTTP 库是 java JDK 自带的 HttpURLConnection。
    • HttpComponentsAsyncClientHttpRequestFactory。对应的 HTTP 库是 Apache HttpComponents。
    • OkHttp3ClientHttpRequestFactory。对应的 HTTP 库是 OkHttp
  • java JDK 自带的 HttpURLConnection 是默认的底层 HTTP 实现客户端
  • SimpleClientHttpRequestFactory,即 java JDK 自带的 HttpURLConnection 不反对 HTTP 协定的 Patch 办法,如果心愿应用 Patch 办法,须要将底层 HTTP 客户端实现切换为 Apache HttpComponents 或 OkHttp
  • 能够通过设置 setRequestFactory 办法,来切换 RestTemplate 的底层 HTTP 客户端实现类库。

二、底层实现切换办法

从开发人员的反馈,和网上的各种 HTTP 客户端性能以及易用水平评测来看,OkHttp 优于 Apache HttpComponents、Apache HttpComponents 优于 HttpURLConnection。所以我集体更倡议大家将底层 HTTP 实现切换为 okHTTP。

以下所讲的切换办法,基于第一篇内容:精讲 RestTemplate 第 1 篇 - 在 Spring 或非 Spring 环境下如何应用

2.1. 切换为 okHTTP

首先通过 maven 坐标将 okHTTP 的包引入到我的项目中来

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.7.2</version>
</dependency>

如果是 spring 环境下通过如下形式应用 OkHttp3ClientHttpRequestFactory 初始化 RestTemplate bean 对象。

@Configuration
public class ContextConfig {@Bean("OKHttp3")
    public RestTemplate OKHttp3RestTemplate(){RestTemplate restTemplate = new RestTemplate(new OkHttp3ClientHttpRequestFactory());
        return restTemplate;
    }
}

如果是非 Spring 环境,间接 new RestTemplate(new OkHttp3ClientHttpRequestFactory() 之后应用就能够了。

2.2. 切换为 Apache HttpComponents

与切换为 okHTTP 办法相似、不再赘述。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.12</version>
</dependency>

应用 HttpComponentsClientHttpRequestFactory 初始化 RestTemplate bean 对象

@Bean("httpClient")
public RestTemplate httpClientRestTemplate(){RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
    return restTemplate;
}

欢送关注我的博客,外面有很多精品合集

  • 本文转载注明出处(必须带连贯,不能只转文字):字母哥博客。

感觉对您有帮忙的话,帮我点赞、分享!您的反对是我不竭的创作能源!。另外,笔者最近一段时间输入了如下的精品内容,期待您的关注。

  • 《手摸手教你学 Spring Boot2.0》
  • 《Spring Security-JWT-OAuth2 一本通》
  • 《实战前后端拆散 RBAC 权限管理系统》
  • 《实战 SpringCloud 微服务从青铜到王者》
  • 《VUE 深入浅出系列》
正文完
 0