在 Spring Boot 1.5.x中 ,我正在创建一个RestTemplate
如下的自定义:
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
PoolingHttpClientConnectionManager poolingConnectionManager = new PoolingHttpClientConnectionManager();
poolingConnectionManager.setMaxTotal(restTemplateProps.getMaxConnectionsPerPool());
poolingConnectionManager.setDefaultMaxPerRoute(restTemplateProps.getMaxDefaultConnectionPerRoute());
CloseableHttpClient client = HttpClientBuilder.create().setConnectionManager(poolingConnectionManager).build();
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory =
new HttpComponentsClientHttpRequestFactory(client);
clientHttpRequestFactory.setConnectTimeout(restTemplateProps.getConnectionTimeout());
clientHttpRequestFactory.setReadTimeout(restTemplateProps.getSocketTimeout());
return restTemplateBuilder.requestFactory(clientHttpRequestFactory).build();
}
但是,在迁移到 Spring Boot 2.1.x之后
,上面的代码无法编译。看起来好像requestFactory
不HttpComponentsClientHttpRequestFactory
作为输入参数。
谁能建议我如何在Spring Boot 2.1.x中实现以上代码?
在深入RestTemplateBuilder
研究 Spring Boot 2.1.x
的源代码之后,我发现他们已经删除了该方法requestFactory(ClientHttpRequestFactory requestFactory)
。这意味着您不能再将ClientHttpRequestFactory
对象注入到requestFactory
方法中。
但是,它现在接受a
Supplier<ClientHttpRequestFactory>
作为输入。因此,如果您只有一个restTemplate和一个requestFactory,那么您要做的就是HttpComponentsClientHttpRequestFactory
在Spring上下文中注册一个bean并传递一个ClientHttpRequestFactorySupplier
to
requestFactory
方法。供应商将自动检测到您HttpComponentsClientHttpRequestFactory
并向您返回所需的RestTemplate。
请参考以下代码:
@Bean
public HttpComponentsClientHttpRequestFactory httpComponentsClientHttpRequestFactory() {
PoolingHttpClientConnectionManager poolingConnectionManager = new PoolingHttpClientConnectionManager();
poolingConnectionManager.setMaxTotal(restTemplateProps.getMaxConnectionsPerPool());
poolingConnectionManager.setDefaultMaxPerRoute(restTemplateProps.getMaxDefaultConnectionPerRoute());
CloseableHttpClient client = HttpClientBuilder.create().setConnectionManager(poolingConnectionManager).build();
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory =
new HttpComponentsClientHttpRequestFactory(client);
clientHttpRequestFactory.setConnectTimeout(restTemplateProps.getConnectionTimeout());
clientHttpRequestFactory.setReadTimeout(restTemplateProps.getSocketTimeout());
return clientHttpRequestFactory;
}
@Bean
public RestTemplate authRestTemplate(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder.requestFactory(new ClientHttpRequestFactorySupplier()).build();
}
对于那些对SpringBoot
2.1.x中RestTemplateBuilder所做的所有更改感兴趣的人,请参考this。
如果我有一个用SwiftUI制作的应用程序,它是否适用于iOS13以下的iOS?
Spring启动版本 1.5.x 可以与 Java 11 一起使用吗?还是有必要将其移至2.1.x春节?
问题内容: 当我在控制台中键入时,我得到了。软链接指向。在Java首选项窗口中,唯一列出的Java版本是1.8。JAVA_HOME设置为。 但是,当我尝试运行Eclipse.app时,出现错误: 我相信它正在尝试使用,并且在该目录中唯一的版本是。 如何获得Eclipse以使用正确版本的Java? 问题答案: 下载64位版本的Eclipse,而不是32位版本。 原因是Eclipse包含本机机器代码(
我正在尝试使用Cassandra 2.1升级到Spring Data Cassandra 1.5. x的Spring Boot 1.5,但出现启动错误: 未能实例化[org.springframework.data.cassandra.mapping.CassandraMappingContext]:工厂方法“cassandraMapping”引发异常;嵌套异常为java.lang.NoClass
我想用react native安装realm localDb,但在项目中安装此包后,不要使用此命令运行react native run android, 我不知道这个错误是什么意思!!! 此版本中使用了不推荐的Gradle功能,使其与Gradle 7.0不兼容 AndroidGradle版本 试验装置 真正的devoice android 9 我看这个答案,但不帮助我!!!已弃用的渐变功能是。。。
Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。 为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。 许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。 为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Pyt