Polish "Add properties for Jetty threadpool"

See gh-17871
pull/17884/head
Madhura Bhave 5 years ago
parent 1024d74742
commit 64e8b1d47c

@ -907,12 +907,12 @@ public class ServerProperties {
private Integer selectors = -1; private Integer selectors = -1;
/** /**
* Maximum amount of threads. * Maximum number of threads.
*/ */
private Integer maxThreads = 200; private Integer maxThreads = 200;
/** /**
* Minimum amount of threads. * Minimum number of threads.
*/ */
private Integer minThreads = 8; private Integer minThreads = 8;

@ -18,6 +18,7 @@ package org.springframework.boot.autoconfigure.web.embedded;
import java.time.Duration; import java.time.Duration;
import java.util.Arrays; import java.util.Arrays;
import java.util.function.Consumer;
import org.eclipse.jetty.server.AbstractConnector; import org.eclipse.jetty.server.AbstractConnector;
import org.eclipse.jetty.server.ConnectionFactory; import org.eclipse.jetty.server.ConnectionFactory;
@ -82,11 +83,11 @@ public class JettyWebServerFactoryCustomizer
propertyMapper.from(jettyProperties::getMaxHttpPostSize).asInt(DataSize::toBytes).when(this::isPositive) propertyMapper.from(jettyProperties::getMaxHttpPostSize).asInt(DataSize::toBytes).when(this::isPositive)
.to((maxHttpPostSize) -> customizeMaxHttpPostSize(factory, maxHttpPostSize)); .to((maxHttpPostSize) -> customizeMaxHttpPostSize(factory, maxHttpPostSize));
propertyMapper.from(jettyProperties::getMaxThreads).when(this::isPositive) 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) propertyMapper.from(jettyProperties::getMinThreads).when(this::isPositive)
.to((minThreads) -> customizeMinThreads(factory, minThreads)); .to((minThreads) -> customizeThreadPool(factory, (threadPool) -> threadPool.setMinThreads(minThreads)));
propertyMapper.from(jettyProperties::getIdleTimeout).when(this::isPositive) propertyMapper.from(jettyProperties::getIdleTimeout).when(this::isPositive).to(
.to((idleTimeout) -> customizeIdleTimeout(factory, idleTimeout)); (idleTimeout) -> customizeThreadPool(factory, (threadPool) -> threadPool.setIdleTimeout(idleTimeout)));
propertyMapper.from(properties::getConnectionTimeout).whenNonNull() propertyMapper.from(properties::getConnectionTimeout).whenNonNull()
.to((connectionTimeout) -> customizeConnectionTimeout(factory, connectionTimeout)); .to((connectionTimeout) -> customizeConnectionTimeout(factory, connectionTimeout));
propertyMapper.from(jettyProperties::getAccesslog).when(ServerProperties.Jetty.Accesslog::isEnabled) 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<QueuedThreadPool> customizer) {
factory.addServerCustomizers((connector) -> { factory.addServerCustomizers((connector) -> {
ThreadPool threadPool = connector.getThreadPool(); ThreadPool threadPool = connector.getThreadPool();
if (threadPool instanceof QueuedThreadPool) { if (threadPool instanceof QueuedThreadPool) {
((QueuedThreadPool) threadPool).setMaxThreads(maxThreads); customizer.accept((QueuedThreadPool) threadPool);
}
});
}
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);
} }
}); });
} }

@ -28,7 +28,6 @@ import org.eclipse.jetty.server.HttpConfiguration.ConnectionFactory;
import org.eclipse.jetty.server.RequestLog; import org.eclipse.jetty.server.RequestLog;
import org.eclipse.jetty.server.RequestLogWriter; import org.eclipse.jetty.server.RequestLogWriter;
import org.eclipse.jetty.util.thread.QueuedThreadPool; 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.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -116,33 +115,27 @@ class JettyWebServerFactoryCustomizerTests {
} }
@Test @Test
void maxThreadsCanBeCustomized() throws IOException { void maxThreadsCanBeCustomized() {
bind("server.jetty.max-threads=100"); bind("server.jetty.max-threads=100");
JettyWebServer server = customizeAndGetServer(); JettyWebServer server = customizeAndGetServer();
ThreadPool threadPool = server.getServer().getThreadPool(); QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool();
if (threadPool instanceof QueuedThreadPool) { assertThat(threadPool.getMaxThreads()).isEqualTo(100);
assertThat(((QueuedThreadPool) threadPool).getMaxThreads()).isEqualTo(100);
}
} }
@Test @Test
void minThreadsCanBeCustomized() throws IOException { void minThreadsCanBeCustomized() {
bind("server.jetty.min-threads=100"); bind("server.jetty.min-threads=100");
JettyWebServer server = customizeAndGetServer(); JettyWebServer server = customizeAndGetServer();
ThreadPool threadPool = server.getServer().getThreadPool(); QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool();
if (threadPool instanceof QueuedThreadPool) { assertThat(threadPool.getMinThreads()).isEqualTo(100);
assertThat(((QueuedThreadPool) threadPool).getMinThreads()).isEqualTo(100);
}
} }
@Test @Test
void idleTimeoutCanBeCustomized() throws IOException { void idleTimeoutCanBeCustomized() {
bind("server.jetty.idle-timeout=100"); bind("server.jetty.idle-timeout=100");
JettyWebServer server = customizeAndGetServer(); JettyWebServer server = customizeAndGetServer();
ThreadPool threadPool = server.getServer().getThreadPool(); QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool();
if (threadPool instanceof QueuedThreadPool) { assertThat(threadPool.getIdleTimeout()).isEqualTo(100);
assertThat(((QueuedThreadPool) threadPool).getIdleTimeout()).isEqualTo(100);
}
} }
private CustomRequestLog getRequestLog(JettyWebServer server) { private CustomRequestLog getRequestLog(JettyWebServer server) {

Loading…
Cancel
Save