gpt4 book ai didi

java - SpringBoot 2.1.x中使用RestTemplateBuilder的requestFactory自定义RestTemplate不向下兼容1.5.x版本

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:36 25 4
gpt4 key购买 nike

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) .这意味着您不能再注入(inject) ClientHttpRequestFactory对象进入 requestFactory方法。

但是,它接受 Supplier<ClientHttpRequestFactory>作为现在的输入。所以如果你只有一个restTemplate和一个requestFactory,你需要做的就是注册一个HttpComponentsClientHttpRequestFactory。 Spring 上下文中的 bean 并传递一个 ClientHttpRequestFactorySupplierrequestFactory方法。供应商会自动检测你的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 .

关于java - SpringBoot 2.1.x中使用RestTemplateBuilder的requestFactory自定义RestTemplate不向下兼容1.5.x版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53511471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com