博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RestTemplate实践
阅读量:7072 次
发布时间:2019-06-28

本文共 2877 字,大约阅读时间需要 9 分钟。

RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。

ClientHttpRequestFactory

RestTemplate可以通过使用ClientHttpRequestFactory指定不同的HTTP请求方式。

ClientHttpRequestFactory接口主要提供了两种实现方式:

  • SimpleClientHttpRequestFactory,使用J2SE提供的方式(既java.net包提供的方式)创建底层的Http请求连接。

  • HttpComponentsClientHttpRequestFactory方式,底层使用HttpClient访问远程的Http服务,使用HttpClient可以配置连接池和证书等信息。

HttpComponentsClientHttpRequestFactory方式

HttpClient配置连接池

@Component("httpClientFactory")public class HttpClientFactoryBean extends DefaultConnectionKeepAliveStrategy implements FactoryBean
, Runnable, InitializingBean, DisposableBean{/** * 保持最多的连接数 */private static final int CONNECTION_MAX_TOTAL = 50;/** * domain最多连接数 */private static final int CONNECTION_MAX_ROUTE = 10;/** * 空闲时间 */private static final int IDLE_TIMEOUT = 30 * 1000;private ScheduledExecutorService service;private PoolingHttpClientConnectionManager connectionManager;private HttpClient httpClient;@Overridepublic HttpClient getObject(){ HttpClientBuilder builder = HttpClients.custom(); builder.setKeepAliveStrategy(this); builder.setConnectionManager(connectionManager); httpClient = builder.build(); return httpClient;}@Overridepublic void afterPropertiesSet(){ service = new ScheduledThreadPoolExecutor(1, new ThreadFactoryBuilder().setNameFormat("httpclient-%d").build()); service.scheduleWithFixedDelay(this, 60, 60, TimeUnit.SECONDS); connectionManager = new PoolingHttpClientConnectionManager(); connectionManager.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(10 * 1000).build()); connectionManager.setDefaultConnectionConfig(ConnectionConfig.custom().setBufferSize(8 * 1024) .setFragmentSizeHint(8 * 1024).build()); connectionManager.setMaxTotal(CONNECTION_MAX_TOTAL); connectionManager.setDefaultMaxPerRoute(CONNECTION_MAX_ROUTE);}@Overridepublic void destroy() { service.shutdownNow(); connectionManager.close();}@Overridepublic Class
getObjectType() { return HttpClient.class;}@Overridepublic boolean isSingleton() { return true;}@Overridepublic void run() { if (connectionManager == null) { return; } connectionManager.closeExpiredConnections(); connectionManager.closeIdleConnections(IDLE_TIMEOUT, TimeUnit.SECONDS);}复制代码

}

配置RestTemplate

@Componentpublic class RestRequest extends RestTemplate {@Autowired@Qualifier("httpClientFactory")private HttpClientFactoryBean httpClientFactory;@PostConstructpublic void init() throws Exception {	HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClientFactory.getObject());	setRequestFactory(factory);	List
> converters = new ArrayList
>(); converters.add(new FastJsonHttpMessageConverter4()); setMessageConverters(converters); setErrorHandler(new ResponseErrorHandler());}复制代码

}

转载地址:http://dokml.baihongyu.com/

你可能感兴趣的文章
func 安装之艰辛历程
查看>>
Ubuntu Server 10.10 操作手记
查看>>
Java静态代码分析工具Infer
查看>>
AIX系统学习之-CRS安装后校验
查看>>
从Code Review 谈如何做技术(zz)酷 壳
查看>>
Internet Connectivity Evaluation Tool
查看>>
LAMP 全功能编译安装 for CentOS6.3笔记(更新)
查看>>
javascript中的数据类型、Object与Function
查看>>
Python回顾与整理4:序列1—字符串
查看>>
深入浅出WPF(8)——数据的绿色通道,Binding(中)
查看>>
使用WCF Test Client(WcfTestClient.exe) 来测试WCF
查看>>
综合应用WPF/WCF/WF/LINQ之三十:代码生成器之DBMLToDAL
查看>>
.NET开源项目介绍及资源推荐:数据持久层
查看>>
RAC同单实例物理备库的switchover
查看>>
MultiRow发现之旅(三)- 模板管理器和Table
查看>>
Exchange 2010与Exchange Online混合部署PART 4:混合部署
查看>>
panama项目中字符编码问题解决
查看>>
向C#的String类添加按字节截取字符串的扩展方法
查看>>
Python中元组、列表、字典的遍历和相互转化
查看>>
SmoothWall的小企业应用
查看>>