diff --git a/pom.xml b/pom.xml
index ab13dbab9..f2374a202 100644
--- a/pom.xml
+++ b/pom.xml
@@ -161,6 +161,10 @@
io.projectreactor
reactor-core
+
+ org.apache.httpcomponents.client5
+ httpclient5
+
org.projectlombok
lombok
@@ -196,12 +200,6 @@
-
-
- org.apache.httpcomponents.client5
- httpclient5
- runtime
-
org.liquibase
liquibase-core
diff --git a/src/main/java/org/gridsuite/study/server/RestTemplateConfig.java b/src/main/java/org/gridsuite/study/server/RestTemplateConfig.java
index 07fcaa17d..f5bcac1ef 100644
--- a/src/main/java/org/gridsuite/study/server/RestTemplateConfig.java
+++ b/src/main/java/org/gridsuite/study/server/RestTemplateConfig.java
@@ -20,6 +20,10 @@
import com.powsybl.sensitivity.json.SensitivityJsonModule;
import com.powsybl.shortcircuit.json.ShortCircuitAnalysisJsonModule;
import com.powsybl.timeseries.json.TimeSeriesJsonModule;
+import org.apache.hc.client5.http.classic.HttpClient;
+import org.apache.hc.client5.http.impl.classic.HttpClients;
+import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
@@ -31,9 +35,28 @@
@Configuration
public class RestTemplateConfig {
+ @Value("${http.client.pool.max-connections:500}")
+ private int httpClientPoolMaxConnections;
+
+ @Value("${http.client.pool.max-connections-per-host:200}")
+ private int httpClientPoolMaxConnectionsPerHost;
+
+ @Bean
+ public HttpClient httpClient() {
+ PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
+ // By default, it's limited to 20 connections and 5 connections per host which is very too low for study-server needs
+ connectionManager.setMaxTotal(httpClientPoolMaxConnections);
+ connectionManager.setDefaultMaxPerRoute(httpClientPoolMaxConnectionsPerHost);
+
+ return HttpClients.custom()
+ .setConnectionManager(connectionManager)
+ .build();
+ }
+
@Bean
- public RestTemplate restTemplate() {
- final RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());
+ public RestTemplate restTemplate(HttpClient httpClient) {
+ // We're using HttpComponentsClientHttpRequestFactory from apache httpclient5 to handle properly HTTP PATCH method
+ final RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory(httpClient));
//find and replace Jackson message converter with our own
for (int i = 0; i < restTemplate.getMessageConverters().size(); i++) {