RestTemplate с пользовательским пулом соединений?

#java #spring #spring-boot #resttemplate #spring-web

#java #весна #весенняя загрузка #resttemplate #spring-web

Вопрос:

Я использую следующую конфигурацию для создания RestTemplate компонента.

 @Bean
@Primary
public RestTemplate restTemplate(RestTemplateBuilder builder) {
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();

    return builder.requestFactory(() -> new BufferingClientHttpRequestFactory(factory))
            .build();
}
  

Проблема: по умолчанию HttpClient создается следующим образом:

 org.apache.http.impl.client.HttpClientBuilder:

    String s = System.getProperty("http.keepAlive", "true");
    if ("true".equalsIgnoreCase(s)) {
        s = System.getProperty("http.maxConnections", "5");
        int max = Integer.parseInt(s);
        poolingmgr.setDefaultMaxPerRoute(max);
        poolingmgr.setMaxTotal(2 * max);
    }
  

Таким образом, по умолчанию в этом шаблоне rest может быть не более 10 одновременных подключений к URL.

Вопрос: как я мог бы наилучшим образом настроить максимальное значение при использовании spring-boot ? Я не нашел ни application.properties одной записи, чтобы установить для нее пользовательское значение.

Побочный вопрос: что означает свойство для каждого маршрута? Это маршрут localhost:8080/myfirst , а другой маршрут localhost:8080/mysnd ? Или оба являются одним и тем же маршрутом localhost:8080 ?

Ответ №1:

Извините, я неправильно понял ваш вопрос.

Это просто: в application.properties вы можете создать свою собственную конфигурацию. Например:

 ## Connection pool max size to appache http client
myProjectId.http.maxConnections=100
  

И затем в вашем компоненте / сервисе / чем-то еще вы можете ввести его простым действием

 @Bean
public class HttpClient  {

    @Value( "${myProjectId.http.maxConnections}" )
    private int maxConnections;

    // some code below

}
  

Комментарии:

1. Хорошо, я подумал, что мог бы каким-то образом переопределить системное свойство http.maxConnections с application.properties помощью…