在深入
RestTemplateBuilder研究 Spring Boot 2.1.x
的源代码之后,我发现他们已经删除了该方法
requestFactory(ClientHttpRequestFactoryrequestFactory)。这意味着您不能再将
ClientHttpRequestFactory对象注入到
requestFactory方法中。
但是,它现在接受a
Supplier<ClientHttpRequestFactory>作为输入。因此,如果您只有一个restTemplate和一个requestFactory,那么您要做的就是
HttpComponentsClientHttpRequestFactory在Spring上下文中注册一个bean并传递一个
ClientHttpRequestFactorySupplierto
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。



