Spring Boot提供了许多可与HTTP客户端一起使用的启动器。本节回答与使用它们有关的问题。

7.1. 配置RestTemplate使用代理

spring-boot-features.html中所述,您可以使用RestTemplateCustomizerwithRestTemplateBuilder来构建自定义的RestTemplate。这是创建RestTemplate配置为使用代理的推荐方法。
代理配置的确切详细信息取决于所使用的基础客户端请求工厂。以下示例使用进行配置HttpComponentsClientRequestFactory,该HttpClient代理使用除192.168.0.5以下主机之外的所有主机的代理:

  1. static class ProxyCustomizer implements RestTemplateCustomizer {
  2. @Override
  3. public void customize(RestTemplate restTemplate) {
  4. HttpHost proxy = new HttpHost("proxy.example.com");
  5. HttpClient httpClient = HttpClientBuilder.create().setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {
  6. @Override
  7. public HttpHost determineProxy(HttpHost target, HttpRequest request, HttpContext context)
  8. throws HttpException {
  9. if (target.getHostName().equals("192.168.0.5")) {
  10. return null;
  11. }
  12. return super.determineProxy(target, request, context);
  13. }
  14. }).build();
  15. restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
  16. }
  17. }

7.2. 配置基于Reactor Netty的WebClient使用的TcpClient

当Reactor Netty在类路径上时,将WebClient自动配置基于Reactor Netty的文件。要自定义客户端对网络连接的处理,请提供一个ClientHttpConnectorbean。以下示例配置60秒的连接超时并添加ReadTimeoutHandler

  1. @Bean
  2. ClientHttpConnector clientHttpConnector(ReactorResourceFactory resourceFactory) {
  3. HttpClient httpClient = HttpClient.create(resourceFactory.getConnectionProvider())
  4. .runOn(resourceFactory.getLoopResources()).option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 60000)
  5. .doOnConnected((connection) -> connection.addHandlerLast(new ReadTimeoutHandler(60)));
  6. return new ReactorClientHttpConnector(httpClient);
  7. }
请注意对ReactorResourceFactory连接提供程序和事件循环资源的使用。这确保了用于服务器接收请求和客户端发出请求的资源的有效共享。