From 64e8b1d47cc579c398b71ae386d4e5daec3735b7 Mon Sep 17 00:00:00 2001 From: Madhura Bhave Date: Thu, 15 Aug 2019 18:30:08 -0700 Subject: [PATCH] Polish "Add properties for Jetty threadpool" See gh-17871 --- .../autoconfigure/web/ServerProperties.java | 4 +-- .../JettyWebServerFactoryCustomizer.java | 31 +++++-------------- .../JettyWebServerFactoryCustomizerTests.java | 25 ++++++--------- 3 files changed, 18 insertions(+), 42 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java index 919ab9878e..0e2eb8daf9 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java @@ -907,12 +907,12 @@ public class ServerProperties { private Integer selectors = -1; /** - * Maximum amount of threads. + * Maximum number of threads. */ private Integer maxThreads = 200; /** - * Minimum amount of threads. + * Minimum number of threads. */ private Integer minThreads = 8; diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizer.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizer.java index 8b488e456f..fab6ae591d 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizer.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizer.java @@ -18,6 +18,7 @@ package org.springframework.boot.autoconfigure.web.embedded; import java.time.Duration; import java.util.Arrays; +import java.util.function.Consumer; import org.eclipse.jetty.server.AbstractConnector; import org.eclipse.jetty.server.ConnectionFactory; @@ -82,11 +83,11 @@ public class JettyWebServerFactoryCustomizer propertyMapper.from(jettyProperties::getMaxHttpPostSize).asInt(DataSize::toBytes).when(this::isPositive) .to((maxHttpPostSize) -> customizeMaxHttpPostSize(factory, maxHttpPostSize)); propertyMapper.from(jettyProperties::getMaxThreads).when(this::isPositive) - .to((maxThreads) -> customizeMaxThreads(factory, maxThreads)); + .to((maxThreads) -> customizeThreadPool(factory, (threadPool) -> threadPool.setMaxThreads(maxThreads))); propertyMapper.from(jettyProperties::getMinThreads).when(this::isPositive) - .to((minThreads) -> customizeMinThreads(factory, minThreads)); - propertyMapper.from(jettyProperties::getIdleTimeout).when(this::isPositive) - .to((idleTimeout) -> customizeIdleTimeout(factory, idleTimeout)); + .to((minThreads) -> customizeThreadPool(factory, (threadPool) -> threadPool.setMinThreads(minThreads))); + propertyMapper.from(jettyProperties::getIdleTimeout).when(this::isPositive).to( + (idleTimeout) -> customizeThreadPool(factory, (threadPool) -> threadPool.setIdleTimeout(idleTimeout))); propertyMapper.from(properties::getConnectionTimeout).whenNonNull() .to((connectionTimeout) -> customizeConnectionTimeout(factory, connectionTimeout)); propertyMapper.from(jettyProperties::getAccesslog).when(ServerProperties.Jetty.Accesslog::isEnabled) @@ -140,29 +141,11 @@ public class JettyWebServerFactoryCustomizer }); } - private void customizeMaxThreads(ConfigurableJettyWebServerFactory factory, int maxThreads) { + private void customizeThreadPool(ConfigurableJettyWebServerFactory factory, Consumer customizer) { factory.addServerCustomizers((connector) -> { ThreadPool threadPool = connector.getThreadPool(); if (threadPool instanceof QueuedThreadPool) { - ((QueuedThreadPool) threadPool).setMaxThreads(maxThreads); - } - }); - } - - private void customizeMinThreads(ConfigurableJettyWebServerFactory factory, int minThreads) { - factory.addServerCustomizers((connector) -> { - ThreadPool threadPool = connector.getThreadPool(); - if (threadPool instanceof QueuedThreadPool) { - ((QueuedThreadPool) threadPool).setMinThreads(minThreads); - } - }); - } - - private void customizeIdleTimeout(ConfigurableJettyWebServerFactory factory, int idleTimeout) { - factory.addServerCustomizers((connector) -> { - ThreadPool threadPool = connector.getThreadPool(); - if (threadPool instanceof QueuedThreadPool) { - ((QueuedThreadPool) threadPool).setIdleTimeout(idleTimeout); + customizer.accept((QueuedThreadPool) threadPool); } }); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizerTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizerTests.java index 1e423c6a98..324bfad4a5 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizerTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizerTests.java @@ -28,7 +28,6 @@ import org.eclipse.jetty.server.HttpConfiguration.ConnectionFactory; import org.eclipse.jetty.server.RequestLog; import org.eclipse.jetty.server.RequestLogWriter; import org.eclipse.jetty.util.thread.QueuedThreadPool; -import org.eclipse.jetty.util.thread.ThreadPool; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -116,33 +115,27 @@ class JettyWebServerFactoryCustomizerTests { } @Test - void maxThreadsCanBeCustomized() throws IOException { + void maxThreadsCanBeCustomized() { bind("server.jetty.max-threads=100"); JettyWebServer server = customizeAndGetServer(); - ThreadPool threadPool = server.getServer().getThreadPool(); - if (threadPool instanceof QueuedThreadPool) { - assertThat(((QueuedThreadPool) threadPool).getMaxThreads()).isEqualTo(100); - } + QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool(); + assertThat(threadPool.getMaxThreads()).isEqualTo(100); } @Test - void minThreadsCanBeCustomized() throws IOException { + void minThreadsCanBeCustomized() { bind("server.jetty.min-threads=100"); JettyWebServer server = customizeAndGetServer(); - ThreadPool threadPool = server.getServer().getThreadPool(); - if (threadPool instanceof QueuedThreadPool) { - assertThat(((QueuedThreadPool) threadPool).getMinThreads()).isEqualTo(100); - } + QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool(); + assertThat(threadPool.getMinThreads()).isEqualTo(100); } @Test - void idleTimeoutCanBeCustomized() throws IOException { + void idleTimeoutCanBeCustomized() { bind("server.jetty.idle-timeout=100"); JettyWebServer server = customizeAndGetServer(); - ThreadPool threadPool = server.getServer().getThreadPool(); - if (threadPool instanceof QueuedThreadPool) { - assertThat(((QueuedThreadPool) threadPool).getIdleTimeout()).isEqualTo(100); - } + QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool(); + assertThat(threadPool.getIdleTimeout()).isEqualTo(100); } private CustomRequestLog getRequestLog(JettyWebServer server) {