【最佳实践】配置类封装-RestTemplate详解

news2024/9/20 17:19:38

在Spring Boot项目中,与远程服务进行HTTP交互是常见的需求,而Spring提供的RestTemplate是一个便捷的工具,可以帮助我们处理HTTP请求,发送数据,接收响应。在本文中,我们将深入了解如何封装RestTemplate,并通过多种方式配置它来优化与RESTful服务的交互。

RestTemplate简介

RestTemplate是Spring Framework提供的用于访问REST服务的客户端。它封装了HTTP请求的各种操作,如GET、POST、PUT、DELETE等。我们可以非常方便地使用它与RESTful API进行交互。以下是一些常见的应用场景:

  • 调用远程接口,获取数据。
  • 发送POST请求上传数据。
  • 与Web服务进行交互。

RestTemplate配置方式

在Spring Boot中,可以通过两种方式配置RestTemplate,分别是使用默认配置和自定义HttpClient实现。以下为两种常见的配置方式。

标准配置模板

在最简单的场景下,我们只需要配置一个基本的RestTemplate即可。以下是一个标准的Spring Boot配置模板:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration(proxyBeanMethods = false)
public class RestTemplateConfiguration {

	@Bean
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}

	@Bean  
	public ClientHttpRequestFactory clientHttpRequestFactory() {  
	    SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory()   ;  
	    // 连接超时时间10s  
	    factory.setConnectTimeout(10000);  
	    // 读取超时时间10s  
	    factory.setReadTimeout(10000);  
	    return factory;  
	}
}

这种配置适合一些小规模的请求量,或者对于并发需求较低的场景。但如果需要更高性能的连接管理,或者更复杂的连接池配置,推荐使用自定义的HttpClient实现。

模板2-自定义HttpClient配置

自定义HttpClient配置
当项目中需要处理大量并发HTTP请求,或者对性能有更高的要求时,可以自定义配置HttpClient,并使用连接池管理多个HTTP连接。以下是一个基于Apache HttpClient的高级配置模板:

复制代码
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory requestFactory){
        return new RestTemplate(requestFactory);
    }

    @Bean
    public ClientHttpRequestFactory httpRequestFactory(){
        return new HttpComponentsClientHttpRequestFactory(httpClient());
    }

    @Bean
    public HttpClient httpClient(){
        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.getSocketFactory())
                .register("https", SSLConnectionSocketFactory.getSocketFactory())
                .build();

        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
        connectionManager.setMaxTotal(500); // 最大连接数
        connectionManager.setDefaultMaxPerRoute(300); // 单个主机最大并发

        RequestConfig requestConfig = RequestConfig.custom()
                .setSocketTimeout(20000) // 读取超时
                .setConnectTimeout(10000) // 连接超时
                .setConnectionRequestTimeout(1000) // 获取连接超时
                .build();

        return HttpClientBuilder.create()
                .setDefaultRequestConfig(requestConfig)
                .setConnectionManager(connectionManager)
                .build();
    }
}

代码解析

  1. 连接池管理:通过PoolingHttpClientConnectionManager来管理连接池,设置最大连接数为500,每个主机的最大并发数为300,这样可以支持更高的并发请求。

  2. 请求配置:使用RequestConfig定制了请求超时时间,包括连接超时、读取超时和从连接池获取连接的超时。

  3. SSL支持:Registry注册了http和https协议的Socket工厂,支持安全连接。

实际项目中,可以根据业务需求,调整连接池的大小、请求超时时间等配置参数,确保系统的稳定性和高效性。希望这篇文章能帮助你更好地理解和使用RestTemplate进行HTTP调用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2149501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

耐高温滑环的应用场景及市场前景分析

耐高温滑环是一种重要的电气连接装置&#xff0c;广泛应用于需要传递电力和信号的旋转设备中。随着工业技术的发展&#xff0c;对耐高温滑环的需求不断增加&#xff0c;尤其是在极端温度环境下的应用场合&#xff0c;耐高温滑环展现出其独特的优势。 耐高温滑环在工业自动化领…

全国网安众测招募计划启动啦,欢迎加入~

在数字化时代&#xff0c;网络安全已成为维护社会稳定、促进经济发展的基石。为了积极响应国家关于加强网络安全工作的号召&#xff0c;确保某区域关键信息系统的稳固运行&#xff0c;我们特此启动一项网络安全众测活动。该活动旨在通过汇聚业界有经验的网络安全攻防人才&#…

【小程序 - 大智慧】深入微信小程序的渲染周期

目录 前言应用生命周期页面的生命周期组件的生命周期渲染顺序页面路由运行机制更新机制同步更新异步更新 前言 跟 Vue、React 框架一样&#xff0c;微信小程序框架也存在生命周期&#xff0c;实质也是一堆会在特定时期执行的函数。 小程序中&#xff0c;生命周期主要分成了三…

使用 VSCode 在 Python 中创建项目环境

了解如何管理 Python 项目的不同环境&#xff0c;欢迎来到雲闪世界。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 介绍 创建数据科学项目非常简单。如今&#xff0c;有了众多资源&#xff0c;您只需选择开发工具并启动项目即可。 除了多个人工智能机…

24.9.16数据结构|平衡二叉树

一、理解逻辑 平衡二叉是有限制的二叉搜索树&#xff0c;满足平衡因子绝对值小于1的二叉搜索树是平衡二叉树。 平衡指的是树的左右两边的节点左右高度平衡&#xff0c;要求平衡因子处于规定范围 平衡因子&#xff1a;该节点的左高度-右高度&#xff0c;绝对值小于1 如何平衡化&…

2024年9月20日历史上的今天大事件早读

公元前480年9月20日 希腊人在爱琴海萨拉米海战中击败了波斯人 383年9月20日 发生“淝水之战” 1013年9月20日 《君臣事迹》书成&#xff0c;赐名《册府元龟》 1519年9月20日 葡萄牙航海家麦哲伦环球航行 1644年9月20日 清顺治帝驾车由盛京出发&#xff0c;迁都北平&#xf…

在SpringCloud中实现服务熔断与降级,保障系统稳定性

在分布式系统中&#xff0c;微服务架构的应用越来越受欢迎。然而&#xff0c;由于各个微服务之间的依赖关系和网络通信的不稳定性&#xff0c;一个不稳定的服务可能会对整个系统产生连锁反应&#xff0c;导致系统崩溃。为了保障系统的稳定性&#xff0c;我们需要一种机制来处理…

FB FC里调用全局变量注意事项

PLC编程基础之数据类型、变量声明、全局变量和I/O映射 PLC编程基础之数据类型、变量声明、全局变量和I/O映射(CODESYS篇 )_codesys全局变量如何映射写入-CSDN博客文章浏览阅读6.3k次,点赞2次,收藏4次。本文介绍了CODESYS编程的基础知识,包括数据类型、变量声明、全局变量、…

Unity 设计模式 之 结构型模式 -【适配器模式】【桥接模式】 【组合模式】

Unity 设计模式 之 结构型模式 -【适配器模式】【桥接模式】 【组合模式】 目录 Unity 设计模式 之 结构型模式 -【适配器模式】【桥接模式】 【组合模式】 一、简单介绍 二、适配器模式 (Adapter Pattern) 1、什么时候使用适配器模式 2、使用适配器模式的好处 3、适配器…

Active Directory 实验室设置第一部分- AD林安装

在之前的文章中&#xff0c;已经讨论了活动目录的基本知识。在这篇文章中&#xff0c;我们将讨论如何设置和配置环境&#xff0c;以便我们可以使用它来执行各种攻击方案和检测。我们将讨论如何通过GUI和CLI方式完成。 # 1、Active Directory 设置 让我们从活动目录实验室设置…

【JAVA开源】基于Vue和SpringBoot的校园美食分享平台

本文项目编号 T 033 &#xff0c;文末自助获取源码 \color{red}{T033&#xff0c;文末自助获取源码} T033&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

docker-compose 部署 flink [支持pyflink]

下载 flink 镜像 [rootlocalhost ~]# docker pull flink Using default tag: latest latest: Pulling from library/flink 762bedf4b1b7: Pull complete 95f9bd9906fa: Pull complete a880dee0d8e9: Pull complete 8c5deab9cbd6: Pull complete 56c142282fae: Pull comple…

python安装-升级

这里写自定义目录标题 欢迎使用Markdown编辑器 欢迎使用Markdown编辑器 运行python 或pycharm时报错 [notice] A new release of pip is available: 23.1.2 -> 24.2 [notice] To update, run: python.exe -m pip install --upgrade pipCMD 进入 DOS C:\Users\wang>pyt…

深度学习:(五)初识神经网络

&#xff08;一&#xff09;神经网络的层数 除去输入层&#xff0c;但包括输出层&#xff0c;每一层都有自己的参数。 输入层称为第零层。 &#xff08;二&#xff09;最简单的神经网络&#xff08;逻辑回归&#xff09; 下图中的小圆圈&#xff0c;代表了一种运算。且一个小…

手撕小顶堆

1. 抛砖引玉 给定两个以升序排列的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v)&#xff0c;其中第一个元素来自 nums1&#xff0c;第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。 分析 大根堆&#xff08;大顶堆&#x…

vue无法通过页面路径访问提示404,通过nginx配置处理

部署vue项目时&#xff0c;可以通过IP的方式访问主页&#xff0c;当进入特定页面在刷新时&#xff0c;因为浏览器通过URL地址进行请求&#xff0c;就提示404错误。 每次都需要重新从主页进入&#xff0c;这里是因为nginx配置的问题&#xff0c;在nginx里增加一行重定向的设置 …

如何使用淘宝API获取买家秀数据?一份详细指南

什么是淘宝买家秀API&#xff1f; 淘宝买家秀API是淘宝开放平台提供的一种接口&#xff0c;它允许开发者通过编程方式获取淘宝商品的买家秀信息&#xff0c;包括买家上传的图片、视频、评论等内容。 为什么需要使用淘宝买家秀API&#xff1f; 提升商品质量&#xff1a;通过分…

什么是CSRF攻击,该如何防护CSRF攻击

CSRF攻击&#xff08;跨站请求伪造&#xff0c;Cross-Site Request Forgery&#xff09;是一种网络攻击手段&#xff0c;攻击者利用已通过身份验证的用户&#xff0c;诱导他们在不知情的情况下执行未授权操作。这种攻击通常发生在用户登录到可信网站并且有活动的会话时&#xf…

【Elasticsearch】-spring boot 依赖包冲突问题

<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.17.24</version></dependency> 在pom的配置中&#xff0c;只引入了elasticsearch-7.17.24 &#xff0c;但实际上会同时…

vue2中字符串动态拼接字段给到接口

【设计初衷是用户可根据给定的字段进行准确描述】 实现功能&#xff1a; 1. 文本域内容串动态配置字段&#xff0c;以$ {英文}拼接格式给到接口。 &#xff08;传参如&#xff1a;$ {heat_status_code}正常&#xff0c;$ {wdy_temp}也正常&#xff01;&#xff09; 2. 编辑时根…