diff --git a/docs/src/main/asciidoc/_configprops.adoc b/docs/src/main/asciidoc/_configprops.adoc index edc88385..5f7642c6 100644 --- a/docs/src/main/asciidoc/_configprops.adoc +++ b/docs/src/main/asciidoc/_configprops.adoc @@ -28,6 +28,7 @@ |spring.cloud.gateway.httpclient.connect-timeout | | The connect timeout in millis, the default is 45s. |spring.cloud.gateway.httpclient.pool.acquire-timeout | | Only for type FIXED, the maximum time in millis to wait for aquiring. |spring.cloud.gateway.httpclient.pool.max-connections | | Only for type FIXED, the maximum number of connections before starting pending acquisition on existing ones. +|spring.cloud.gateway.httpclient.pool.max-idle-time | | Time in millis after which the channel will be closed. If NULL, there is no max idle time. |spring.cloud.gateway.httpclient.pool.name | proxy | The channel pool map name, defaults to proxy. |spring.cloud.gateway.httpclient.pool.type | | Type of pool for HttpClient to use, defaults to ELASTIC. |spring.cloud.gateway.httpclient.proxy.host | | Hostname for proxy configuration of Netty HttpClient. diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java index b5dfcec0..e087c063 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/GatewayAutoConfiguration.java @@ -152,6 +152,7 @@ import static org.springframework.cloud.gateway.config.HttpClientProperties.Pool /** * @author Spencer Gibb + * @author Ziemowit Stolarczyk */ @Configuration(proxyBeanMethods = false) @ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMissing = true) @@ -586,10 +587,12 @@ public class GatewayAutoConfiguration { } else if (pool.getType() == FIXED) { connectionProvider = ConnectionProvider.fixed(pool.getName(), - pool.getMaxConnections(), pool.getAcquireTimeout()); + pool.getMaxConnections(), pool.getAcquireTimeout(), + pool.getMaxIdleTime()); } else { - connectionProvider = ConnectionProvider.elastic(pool.getName()); + connectionProvider = ConnectionProvider.elastic(pool.getName(), + pool.getMaxIdleTime()); } HttpClient httpClient = HttpClient.create(connectionProvider) diff --git a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java index 55c71f29..c34df7be 100644 --- a/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java +++ b/spring-cloud-gateway-core/src/main/java/org/springframework/cloud/gateway/config/HttpClientProperties.java @@ -157,6 +157,12 @@ public class HttpClientProperties { /** Only for type FIXED, the maximum time in millis to wait for aquiring. */ private Long acquireTimeout = ConnectionProvider.DEFAULT_POOL_ACQUIRE_TIMEOUT; + /** + * Time in millis after which the channel will be closed. + * If NULL, there is no max idle time. + */ + private Duration maxIdleTime = null; + public PoolType getType() { return type; } @@ -189,6 +195,14 @@ public class HttpClientProperties { this.acquireTimeout = acquireTimeout; } + public Duration getMaxIdleTime() { + return maxIdleTime; + } + + public void setMaxIdleTime(Duration maxIdleTime) { + this.maxIdleTime = maxIdleTime; + } + @Override public String toString() { return "Pool{" + "type=" + type + ", name='" + name + '\''