Merge pull request #19475 from bono007
* pr/19475: Polish "Add 'threads' configuration group for embedded containers" Add 'threads' configuration group for embedded containers Closes gh-19475
This commit is contained in:
@@ -66,6 +66,7 @@ import org.springframework.util.unit.DataSize;
|
||||
* @author Dirk Deyne
|
||||
* @author HaiTao Zhang
|
||||
* @author Victor Mandujano
|
||||
* @author Chris Bono
|
||||
* @since 1.0.0
|
||||
*/
|
||||
@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
|
||||
@@ -316,6 +317,11 @@ public class ServerProperties {
|
||||
*/
|
||||
private final Accesslog accesslog = new Accesslog();
|
||||
|
||||
/**
|
||||
* Thread related configuration.
|
||||
*/
|
||||
private final Threads threads = new Threads();
|
||||
|
||||
/**
|
||||
* Tomcat base directory. If not specified, a temporary directory is used.
|
||||
*/
|
||||
@@ -328,16 +334,6 @@ public class ServerProperties {
|
||||
@DurationUnit(ChronoUnit.SECONDS)
|
||||
private Duration backgroundProcessorDelay = Duration.ofSeconds(10);
|
||||
|
||||
/**
|
||||
* Maximum amount of worker threads.
|
||||
*/
|
||||
private int maxThreads = 200;
|
||||
|
||||
/**
|
||||
* Minimum amount of worker threads.
|
||||
*/
|
||||
private int minSpareThreads = 10;
|
||||
|
||||
/**
|
||||
* Maximum size of the form content in any HTTP post request.
|
||||
*/
|
||||
@@ -425,20 +421,26 @@ public class ServerProperties {
|
||||
*/
|
||||
private final Remoteip remoteip = new Remoteip();
|
||||
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "server.tomcat.threads.max")
|
||||
public int getMaxThreads() {
|
||||
return this.maxThreads;
|
||||
return this.getThreads().getMax();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setMaxThreads(int maxThreads) {
|
||||
this.maxThreads = maxThreads;
|
||||
this.getThreads().setMax(maxThreads);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "server.tomcat.threads.min-spare")
|
||||
public int getMinSpareThreads() {
|
||||
return this.minSpareThreads;
|
||||
return this.getThreads().getMinSpare();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setMinSpareThreads(int minSpareThreads) {
|
||||
this.minSpareThreads = minSpareThreads;
|
||||
this.getThreads().setMinSpare(minSpareThreads);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@@ -464,6 +466,10 @@ public class ServerProperties {
|
||||
return this.accesslog;
|
||||
}
|
||||
|
||||
public Threads getThreads() {
|
||||
return this.threads;
|
||||
}
|
||||
|
||||
public Duration getBackgroundProcessorDelay() {
|
||||
return this.backgroundProcessorDelay;
|
||||
}
|
||||
@@ -870,6 +876,39 @@ public class ServerProperties {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Tomcat thread properties.
|
||||
*/
|
||||
public static class Threads {
|
||||
|
||||
/**
|
||||
* Maximum amount of worker threads.
|
||||
*/
|
||||
private int max = 200;
|
||||
|
||||
/**
|
||||
* Minimum amount of worker threads.
|
||||
*/
|
||||
private int minSpare = 10;
|
||||
|
||||
public int getMax() {
|
||||
return this.max;
|
||||
}
|
||||
|
||||
public void setMax(int max) {
|
||||
this.max = max;
|
||||
}
|
||||
|
||||
public int getMinSpare() {
|
||||
return this.minSpare;
|
||||
}
|
||||
|
||||
public void setMinSpare(int minSpare) {
|
||||
this.minSpare = minSpare;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Tomcat static resource properties.
|
||||
*/
|
||||
@@ -1022,44 +1061,16 @@ public class ServerProperties {
|
||||
*/
|
||||
private final Accesslog accesslog = new Accesslog();
|
||||
|
||||
/**
|
||||
* Thread related configuration.
|
||||
*/
|
||||
private final Threads threads = new Threads();
|
||||
|
||||
/**
|
||||
* Maximum size of the form content in any HTTP post request.
|
||||
*/
|
||||
private DataSize maxHttpFormPostSize = DataSize.ofBytes(200000);
|
||||
|
||||
/**
|
||||
* Number of acceptor threads to use. When the value is -1, the default, the
|
||||
* number of acceptors is derived from the operating environment.
|
||||
*/
|
||||
private Integer acceptors = -1;
|
||||
|
||||
/**
|
||||
* Number of selector threads to use. When the value is -1, the default, the
|
||||
* number of selectors is derived from the operating environment.
|
||||
*/
|
||||
private Integer selectors = -1;
|
||||
|
||||
/**
|
||||
* Minimum number of threads.
|
||||
*/
|
||||
private int minThreads = 8;
|
||||
|
||||
/**
|
||||
* Maximum number of threads.
|
||||
*/
|
||||
private int maxThreads = 200;
|
||||
|
||||
/**
|
||||
* Maximum capacity of the thread pool's backing queue. A default is computed
|
||||
* based on the threading configuration.
|
||||
*/
|
||||
private Integer maxQueueCapacity;
|
||||
|
||||
/**
|
||||
* Maximum thread idle time.
|
||||
*/
|
||||
private Duration threadIdleTimeout = Duration.ofMillis(60000);
|
||||
|
||||
/**
|
||||
* Time that the connection can be idle before it is closed.
|
||||
*/
|
||||
@@ -1069,6 +1080,10 @@ public class ServerProperties {
|
||||
return this.accesslog;
|
||||
}
|
||||
|
||||
public Threads getThreads() {
|
||||
return this.threads;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "server.jetty.max-http-form-post-size")
|
||||
public DataSize getMaxHttpPostSize() {
|
||||
@@ -1088,52 +1103,68 @@ public class ServerProperties {
|
||||
this.maxHttpFormPostSize = maxHttpFormPostSize;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "server.jetty.threads.acceptors")
|
||||
public Integer getAcceptors() {
|
||||
return this.acceptors;
|
||||
return this.getThreads().getAcceptors();
|
||||
}
|
||||
|
||||
public void setAcceptors(Integer acceptors) {
|
||||
this.acceptors = acceptors;
|
||||
this.getThreads().setAcceptors(acceptors);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "server.jetty.threads.selectors")
|
||||
public Integer getSelectors() {
|
||||
return this.selectors;
|
||||
return this.getThreads().getSelectors();
|
||||
}
|
||||
|
||||
public void setSelectors(Integer selectors) {
|
||||
this.selectors = selectors;
|
||||
this.getThreads().setSelectors(selectors);
|
||||
}
|
||||
|
||||
public void setMinThreads(int minThreads) {
|
||||
this.minThreads = minThreads;
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "server.jetty.threads.min")
|
||||
public Integer getMinThreads() {
|
||||
return this.getThreads().getMin();
|
||||
}
|
||||
|
||||
public int getMinThreads() {
|
||||
return this.minThreads;
|
||||
@Deprecated
|
||||
public void setMinThreads(Integer minThreads) {
|
||||
this.getThreads().setMin(minThreads);
|
||||
}
|
||||
|
||||
public void setMaxThreads(int maxThreads) {
|
||||
this.maxThreads = maxThreads;
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "server.jetty.threads.max")
|
||||
public Integer getMaxThreads() {
|
||||
return this.getThreads().getMax();
|
||||
}
|
||||
|
||||
public int getMaxThreads() {
|
||||
return this.maxThreads;
|
||||
}
|
||||
|
||||
public void setMaxQueueCapacity(Integer maxQueueCapacity) {
|
||||
this.maxQueueCapacity = maxQueueCapacity;
|
||||
@Deprecated
|
||||
public void setMaxThreads(Integer maxThreads) {
|
||||
this.getThreads().setMax(maxThreads);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "server.jetty.threads.max-queue-capacity")
|
||||
public Integer getMaxQueueCapacity() {
|
||||
return this.maxQueueCapacity;
|
||||
return this.getThreads().getMaxQueueCapacity();
|
||||
}
|
||||
|
||||
public void setThreadIdleTimeout(Duration threadIdleTimeout) {
|
||||
this.threadIdleTimeout = threadIdleTimeout;
|
||||
@Deprecated
|
||||
public void setMaxQueueCapacity(Integer maxQueueCapacity) {
|
||||
this.getThreads().setMaxQueueCapacity(maxQueueCapacity);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "server.jetty.threads.idle-timeout")
|
||||
public Duration getThreadIdleTimeout() {
|
||||
return this.threadIdleTimeout;
|
||||
return this.getThreads().getIdleTimeout();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setThreadIdleTimeout(Duration threadIdleTimeout) {
|
||||
this.getThreads().setIdleTimeout(threadIdleTimeout);
|
||||
}
|
||||
|
||||
public Duration getConnectionIdleTimeout() {
|
||||
@@ -1274,6 +1305,94 @@ public class ServerProperties {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Jetty thread properties.
|
||||
*/
|
||||
public static class Threads {
|
||||
|
||||
/**
|
||||
* Number of acceptor threads to use. When the value is -1, the default, the
|
||||
* number of acceptors is derived from the operating environment.
|
||||
*/
|
||||
private Integer acceptors = -1;
|
||||
|
||||
/**
|
||||
* Number of selector threads to use. When the value is -1, the default, the
|
||||
* number of selectors is derived from the operating environment.
|
||||
*/
|
||||
private Integer selectors = -1;
|
||||
|
||||
/**
|
||||
* Maximum number of threads.
|
||||
*/
|
||||
private Integer max = 200;
|
||||
|
||||
/**
|
||||
* Minimum number of threads.
|
||||
*/
|
||||
private Integer min = 8;
|
||||
|
||||
/**
|
||||
* Maximum capacity of the thread pool's backing queue. A default is computed
|
||||
* based on the threading configuration.
|
||||
*/
|
||||
private Integer maxQueueCapacity;
|
||||
|
||||
/**
|
||||
* Maximum thread idle time.
|
||||
*/
|
||||
private Duration idleTimeout = Duration.ofMillis(60000);
|
||||
|
||||
public Integer getAcceptors() {
|
||||
return this.acceptors;
|
||||
}
|
||||
|
||||
public void setAcceptors(Integer acceptors) {
|
||||
this.acceptors = acceptors;
|
||||
}
|
||||
|
||||
public Integer getSelectors() {
|
||||
return this.selectors;
|
||||
}
|
||||
|
||||
public void setSelectors(Integer selectors) {
|
||||
this.selectors = selectors;
|
||||
}
|
||||
|
||||
public void setMin(Integer min) {
|
||||
this.min = min;
|
||||
}
|
||||
|
||||
public Integer getMin() {
|
||||
return this.min;
|
||||
}
|
||||
|
||||
public void setMax(Integer max) {
|
||||
this.max = max;
|
||||
}
|
||||
|
||||
public Integer getMax() {
|
||||
return this.max;
|
||||
}
|
||||
|
||||
public Integer getMaxQueueCapacity() {
|
||||
return this.maxQueueCapacity;
|
||||
}
|
||||
|
||||
public void setMaxQueueCapacity(Integer maxQueueCapacity) {
|
||||
this.maxQueueCapacity = maxQueueCapacity;
|
||||
}
|
||||
|
||||
public void setIdleTimeout(Duration idleTimeout) {
|
||||
this.idleTimeout = idleTimeout;
|
||||
}
|
||||
|
||||
public Duration getIdleTimeout() {
|
||||
return this.idleTimeout;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1313,17 +1432,6 @@ public class ServerProperties {
|
||||
*/
|
||||
private DataSize bufferSize;
|
||||
|
||||
/**
|
||||
* Number of I/O threads to create for the worker. The default is derived from the
|
||||
* number of available processors.
|
||||
*/
|
||||
private Integer ioThreads;
|
||||
|
||||
/**
|
||||
* Number of worker threads. The default is 8 times the number of I/O threads.
|
||||
*/
|
||||
private Integer workerThreads;
|
||||
|
||||
/**
|
||||
* Whether to allocate buffers outside the Java heap. The default is derived from
|
||||
* the maximum amount of memory that is available to the JVM.
|
||||
@@ -1386,6 +1494,11 @@ public class ServerProperties {
|
||||
|
||||
private final Accesslog accesslog = new Accesslog();
|
||||
|
||||
/**
|
||||
* Thread related configuration.
|
||||
*/
|
||||
private final Threads threads = new Threads();
|
||||
|
||||
private final Options options = new Options();
|
||||
|
||||
public DataSize getMaxHttpPostSize() {
|
||||
@@ -1404,20 +1517,26 @@ public class ServerProperties {
|
||||
this.bufferSize = bufferSize;
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "server.undertow.threads.io")
|
||||
public Integer getIoThreads() {
|
||||
return this.ioThreads;
|
||||
return this.getThreads().getIo();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setIoThreads(Integer ioThreads) {
|
||||
this.ioThreads = ioThreads;
|
||||
this.getThreads().setIo(ioThreads);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@DeprecatedConfigurationProperty(replacement = "server.undertow.threads.worker")
|
||||
public Integer getWorkerThreads() {
|
||||
return this.workerThreads;
|
||||
return this.getThreads().getWorker();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setWorkerThreads(Integer workerThreads) {
|
||||
this.workerThreads = workerThreads;
|
||||
this.getThreads().setWorker(workerThreads);
|
||||
}
|
||||
|
||||
public Boolean getDirectBuffers() {
|
||||
@@ -1504,6 +1623,10 @@ public class ServerProperties {
|
||||
return this.accesslog;
|
||||
}
|
||||
|
||||
public Threads getThreads() {
|
||||
return this.threads;
|
||||
}
|
||||
|
||||
public Options getOptions() {
|
||||
return this.options;
|
||||
}
|
||||
@@ -1593,6 +1716,40 @@ public class ServerProperties {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Undertow thread properties.
|
||||
*/
|
||||
public static class Threads {
|
||||
|
||||
/**
|
||||
* Number of I/O threads to create for the worker. The default is derived from
|
||||
* the number of available processors.
|
||||
*/
|
||||
private Integer io;
|
||||
|
||||
/**
|
||||
* Number of worker threads. The default is 8 times the number of I/O threads.
|
||||
*/
|
||||
private Integer worker;
|
||||
|
||||
public Integer getIo() {
|
||||
return this.io;
|
||||
}
|
||||
|
||||
public void setIo(Integer io) {
|
||||
this.io = io;
|
||||
}
|
||||
|
||||
public Integer getWorker() {
|
||||
return this.worker;
|
||||
}
|
||||
|
||||
public void setWorker(Integer worker) {
|
||||
this.worker = worker;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class Options {
|
||||
|
||||
private Map<String, String> socket = new LinkedHashMap<>();
|
||||
|
||||
@@ -77,10 +77,11 @@ public class JettyWebServerFactoryCustomizer
|
||||
ServerProperties properties = this.serverProperties;
|
||||
ServerProperties.Jetty jettyProperties = properties.getJetty();
|
||||
factory.setUseForwardHeaders(getOrDeduceUseForwardHeaders());
|
||||
factory.setThreadPool(determineThreadPool(jettyProperties));
|
||||
ServerProperties.Jetty.Threads threadProperties = jettyProperties.getThreads();
|
||||
factory.setThreadPool(determineThreadPool(jettyProperties.getThreads()));
|
||||
PropertyMapper propertyMapper = PropertyMapper.get();
|
||||
propertyMapper.from(jettyProperties::getAcceptors).whenNonNull().to(factory::setAcceptors);
|
||||
propertyMapper.from(jettyProperties::getSelectors).whenNonNull().to(factory::setSelectors);
|
||||
propertyMapper.from(threadProperties::getAcceptors).whenNonNull().to(factory::setAcceptors);
|
||||
propertyMapper.from(threadProperties::getSelectors).whenNonNull().to(factory::setSelectors);
|
||||
propertyMapper.from(properties::getMaxHttpHeaderSize).whenNonNull().asInt(DataSize::toBytes)
|
||||
.when(this::isPositive).to((maxHttpHeaderSize) -> factory
|
||||
.addServerCustomizers(new MaxHttpHeaderSizeCustomizer(maxHttpHeaderSize)));
|
||||
@@ -141,12 +142,12 @@ public class JettyWebServerFactoryCustomizer
|
||||
});
|
||||
}
|
||||
|
||||
private ThreadPool determineThreadPool(ServerProperties.Jetty properties) {
|
||||
private ThreadPool determineThreadPool(ServerProperties.Jetty.Threads properties) {
|
||||
BlockingQueue<Runnable> queue = determineBlockingQueue(properties.getMaxQueueCapacity());
|
||||
int maxThreadCount = (properties.getMaxThreads() > 0) ? properties.getMaxThreads() : 200;
|
||||
int minThreadCount = (properties.getMinThreads() > 0) ? properties.getMinThreads() : 8;
|
||||
int threadIdleTimeout = (properties.getThreadIdleTimeout() != null)
|
||||
? (int) properties.getThreadIdleTimeout().toMillis() : 60000;
|
||||
int maxThreadCount = (properties.getMax() > 0) ? properties.getMax() : 200;
|
||||
int minThreadCount = (properties.getMin() > 0) ? properties.getMin() : 8;
|
||||
int threadIdleTimeout = (properties.getIdleTimeout() != null) ? (int) properties.getIdleTimeout().toMillis()
|
||||
: 60000;
|
||||
return new QueuedThreadPool(maxThreadCount, minThreadCount, threadIdleTimeout, queue);
|
||||
}
|
||||
|
||||
|
||||
@@ -84,9 +84,10 @@ public class TomcatWebServerFactoryCustomizer
|
||||
propertyMapper.from(tomcatProperties::getBackgroundProcessorDelay).whenNonNull().as(Duration::getSeconds)
|
||||
.as(Long::intValue).to(factory::setBackgroundProcessorDelay);
|
||||
customizeRemoteIpValve(factory);
|
||||
propertyMapper.from(tomcatProperties::getMaxThreads).when(this::isPositive)
|
||||
.to((maxThreads) -> customizeMaxThreads(factory, tomcatProperties.getMaxThreads()));
|
||||
propertyMapper.from(tomcatProperties::getMinSpareThreads).when(this::isPositive)
|
||||
ServerProperties.Tomcat.Threads threadProperties = tomcatProperties.getThreads();
|
||||
propertyMapper.from(threadProperties::getMax).when(this::isPositive)
|
||||
.to((maxThreads) -> customizeMaxThreads(factory, threadProperties.getMax()));
|
||||
propertyMapper.from(threadProperties::getMinSpare).when(this::isPositive)
|
||||
.to((minSpareThreads) -> customizeMinThreads(factory, minSpareThreads));
|
||||
propertyMapper.from(this.serverProperties.getMaxHttpHeaderSize()).whenNonNull().asInt(DataSize::toBytes)
|
||||
.when(this::isPositive)
|
||||
|
||||
@@ -89,8 +89,9 @@ public class UndertowWebServerFactoryCustomizer
|
||||
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
|
||||
Undertow properties = this.serverProperties.getUndertow();
|
||||
map.from(properties::getBufferSize).whenNonNull().asInt(DataSize::toBytes).to(factory::setBufferSize);
|
||||
map.from(properties::getIoThreads).to(factory::setIoThreads);
|
||||
map.from(properties::getWorkerThreads).to(factory::setWorkerThreads);
|
||||
ServerProperties.Undertow.Threads threadProperties = properties.getThreads();
|
||||
map.from(threadProperties::getIo).to(factory::setIoThreads);
|
||||
map.from(threadProperties::getWorker).to(factory::setWorkerThreads);
|
||||
map.from(properties::getDirectBuffers).to(factory::setUseDirectBuffers);
|
||||
map.from(properties::getMaxHttpPostSize).as(DataSize::toBytes).when(this::isPositive)
|
||||
.to(options.server(UndertowOptions.MAX_ENTITY_SIZE));
|
||||
|
||||
@@ -20,6 +20,7 @@ import java.io.IOException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.URI;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.Duration;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -75,6 +76,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
* @author Andrew McGhie
|
||||
* @author HaiTao Zhang
|
||||
* @author Rafiullah Hamedy
|
||||
* @author Chris Bono
|
||||
*/
|
||||
class ServerPropertiesTests {
|
||||
|
||||
@@ -207,40 +209,109 @@ class ServerPropertiesTests {
|
||||
assertThat(this.properties.getMaxHttpHeaderSize()).isEqualTo(DataSize.ofKilobytes(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeTomcatMaxThreads() {
|
||||
bind("server.tomcat.threads.max", "10");
|
||||
assertThat(this.properties.getTomcat().getThreads().getMax()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Test
|
||||
void testCustomizeTomcatMaxThreadsDeprecated() {
|
||||
bind("server.tomcat.maxThreads", "10");
|
||||
assertThat(this.properties.getTomcat().getThreads().getMax()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeTomcatMinSpareThreads() {
|
||||
bind("server.tomcat.threads.min-spare", "10");
|
||||
assertThat(this.properties.getTomcat().getThreads().getMinSpare()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Test
|
||||
void testCustomizeTomcatMinSpareThreadsDeprecated() {
|
||||
bind("server.tomcat.min-spare-threads", "10");
|
||||
assertThat(this.properties.getTomcat().getThreads().getMinSpare()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeJettyAcceptors() {
|
||||
bind("server.jetty.threads.acceptors", "10");
|
||||
assertThat(this.properties.getJetty().getThreads().getAcceptors()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Test
|
||||
void testCustomizeJettyAcceptorsDeprecated() {
|
||||
bind("server.jetty.acceptors", "10");
|
||||
assertThat(this.properties.getJetty().getAcceptors()).isEqualTo(10);
|
||||
assertThat(this.properties.getJetty().getThreads().getAcceptors()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeJettySelectors() {
|
||||
bind("server.jetty.threads.selectors", "10");
|
||||
assertThat(this.properties.getJetty().getThreads().getSelectors()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Test
|
||||
void testCustomizeJettySelectorsDeprecated() {
|
||||
bind("server.jetty.selectors", "10");
|
||||
assertThat(this.properties.getJetty().getSelectors()).isEqualTo(10);
|
||||
assertThat(this.properties.getJetty().getThreads().getSelectors()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeJettyMaxThreads() {
|
||||
bind("server.jetty.max-threads", "10");
|
||||
assertThat(this.properties.getJetty().getMaxThreads()).isEqualTo(10);
|
||||
bind("server.jetty.threads.max", "10");
|
||||
assertThat(this.properties.getJetty().getThreads().getMax()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Test
|
||||
void testCustomizeJettyMaxThreadsDeprecated() {
|
||||
bind("server.jetty.maxThreads", "10");
|
||||
assertThat(this.properties.getJetty().getThreads().getMax()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeJettyMinThreads() {
|
||||
bind("server.jetty.min-threads", "10");
|
||||
assertThat(this.properties.getJetty().getMinThreads()).isEqualTo(10);
|
||||
bind("server.jetty.threads.min", "10");
|
||||
assertThat(this.properties.getJetty().getThreads().getMin()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Test
|
||||
void testCustomizeJettyMinThreadsDeprecated() {
|
||||
bind("server.jetty.minThreads", "10");
|
||||
assertThat(this.properties.getJetty().getThreads().getMin()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeJettyIdleTimeout() {
|
||||
bind("server.jetty.threads.idle-timeout", "10s");
|
||||
assertThat(this.properties.getJetty().getThreads().getIdleTimeout()).isEqualTo(Duration.ofSeconds(10));
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Test
|
||||
void testCustomizeJettyIdleTimeoutDeprecated() {
|
||||
bind("server.jetty.thread-idle-timeout", "10s");
|
||||
assertThat(this.properties.getJetty().getThreadIdleTimeout()).hasSeconds(10);
|
||||
assertThat(this.properties.getJetty().getThreads().getIdleTimeout()).hasSeconds(10);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeJettyMaxQueueCapacity() {
|
||||
bind("server.jetty.threads.max-queue-capacity", "5150");
|
||||
assertThat(this.properties.getJetty().getThreads().getMaxQueueCapacity()).isEqualTo(5150);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Test
|
||||
void testCustomizeJettyMaxQueueCapacityDeprecated() {
|
||||
bind("server.jetty.max-queue-capacity", "5150");
|
||||
assertThat(this.properties.getJetty().getMaxQueueCapacity()).isEqualTo(5150);
|
||||
assertThat(this.properties.getJetty().getThreads().getMaxQueueCapacity()).isEqualTo(5150);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -257,6 +328,32 @@ class ServerPropertiesTests {
|
||||
"true");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeUndertowIoThreads() {
|
||||
bind("server.undertow.threads.io", "4");
|
||||
assertThat(this.properties.getUndertow().getThreads().getIo()).isEqualTo(4);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Test
|
||||
void testCustomizeUndertowIoThreadsDeprecated() {
|
||||
bind("server.undertow.ioThreads", "4");
|
||||
assertThat(this.properties.getUndertow().getThreads().getIo()).isEqualTo(4);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeUndertowWorkerThreads() {
|
||||
bind("server.undertow.threads.worker", "10");
|
||||
assertThat(this.properties.getUndertow().getThreads().getWorker()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
@Test
|
||||
void testCustomizeUndertowWorkerThreadsDeprecated() {
|
||||
bind("server.undertow.workerThreads", "10");
|
||||
assertThat(this.properties.getUndertow().getThreads().getWorker()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCustomizeJettyAccessLog() {
|
||||
Map<String, String> map = new HashMap<>();
|
||||
@@ -295,12 +392,12 @@ class ServerPropertiesTests {
|
||||
|
||||
@Test
|
||||
void tomcatMaxThreadsMatchesProtocolDefault() throws Exception {
|
||||
assertThat(this.properties.getTomcat().getMaxThreads()).isEqualTo(getDefaultProtocol().getMaxThreads());
|
||||
assertThat(this.properties.getTomcat().getThreads().getMax()).isEqualTo(getDefaultProtocol().getMaxThreads());
|
||||
}
|
||||
|
||||
@Test
|
||||
void tomcatMinSpareThreadsMatchesProtocolDefault() throws Exception {
|
||||
assertThat(this.properties.getTomcat().getMinSpareThreads())
|
||||
assertThat(this.properties.getTomcat().getThreads().getMinSpare())
|
||||
.isEqualTo(getDefaultProtocol().getMinSpareThreads());
|
||||
}
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@ class JettyWebServerFactoryCustomizerTests {
|
||||
|
||||
@Test
|
||||
void threadPoolIdleTimeoutCanBeCustomized() {
|
||||
bind("server.jetty.thread-idle-timeout=100s");
|
||||
bind("server.jetty.threads.idle-timeout=100s");
|
||||
JettyWebServer server = customizeAndGetServer();
|
||||
QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool();
|
||||
assertThat(threadPool.getIdleTimeout()).isEqualTo(100000);
|
||||
@@ -187,7 +187,7 @@ class JettyWebServerFactoryCustomizerTests {
|
||||
|
||||
@Test
|
||||
void threadPoolWithMaxQueueCapacityEqualToZeroCreateSynchronousQueue() {
|
||||
bind("server.jetty.max-queue-capacity=0");
|
||||
bind("server.jetty.threads.max-queue-capacity=0");
|
||||
JettyWebServer server = customizeAndGetServer();
|
||||
ThreadPool threadPool = server.getServer().getThreadPool();
|
||||
BlockingQueue<?> queue = getQueue(threadPool);
|
||||
@@ -197,8 +197,8 @@ class JettyWebServerFactoryCustomizerTests {
|
||||
|
||||
@Test
|
||||
void threadPoolWithMaxQueueCapacityEqualToZeroCustomizesThreadPool() {
|
||||
bind("server.jetty.max-queue-capacity=0", "server.jetty.min-threads=100", "server.jetty.max-threads=100",
|
||||
"server.jetty.thread-idle-timeout=6s");
|
||||
bind("server.jetty.threads.max-queue-capacity=0", "server.jetty.min-threads=100",
|
||||
"server.jetty.max-threads=100", "server.jetty.threads.idle-timeout=6s");
|
||||
JettyWebServer server = customizeAndGetServer();
|
||||
QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool();
|
||||
assertThat(threadPool.getMinThreads()).isEqualTo(100);
|
||||
@@ -208,7 +208,7 @@ class JettyWebServerFactoryCustomizerTests {
|
||||
|
||||
@Test
|
||||
void threadPoolWithMaxQueueCapacityPositiveCreateBlockingArrayQueue() {
|
||||
bind("server.jetty.max-queue-capacity=1234");
|
||||
bind("server.jetty.threads.max-queue-capacity=1234");
|
||||
JettyWebServer server = customizeAndGetServer();
|
||||
ThreadPool threadPool = server.getServer().getThreadPool();
|
||||
BlockingQueue<?> queue = getQueue(threadPool);
|
||||
@@ -219,8 +219,8 @@ class JettyWebServerFactoryCustomizerTests {
|
||||
|
||||
@Test
|
||||
void threadPoolWithMaxQueueCapacityPositiveCustomizesThreadPool() {
|
||||
bind("server.jetty.max-queue-capacity=1234", "server.jetty.min-threads=10", "server.jetty.max-threads=150",
|
||||
"server.jetty.thread-idle-timeout=3s");
|
||||
bind("server.jetty.threads.max-queue-capacity=1234", "server.jetty.min-threads=10",
|
||||
"server.jetty.max-threads=150", "server.jetty.threads.idle-timeout=3s");
|
||||
JettyWebServer server = customizeAndGetServer();
|
||||
QueuedThreadPool threadPool = (QueuedThreadPool) server.getServer().getThreadPool();
|
||||
assertThat(threadPool.getMinThreads()).isEqualTo(10);
|
||||
|
||||
@@ -345,8 +345,8 @@ class TomcatWebServerFactoryCustomizerTests {
|
||||
|
||||
@Test
|
||||
void testCustomizeMinSpareThreads() {
|
||||
bind("server.tomcat.min-spare-threads=10");
|
||||
assertThat(this.serverProperties.getTomcat().getMinSpareThreads()).isEqualTo(10);
|
||||
bind("server.tomcat.threads.min-spare=10");
|
||||
assertThat(this.serverProperties.getTomcat().getThreads().getMinSpare()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -132,6 +132,22 @@ class UndertowWebServerFactoryCustomizerTests {
|
||||
assertThat(boundServerOption(UndertowOptions.MAX_COOKIES)).isEqualTo(4);
|
||||
}
|
||||
|
||||
@Test
|
||||
void customizeIoThreads() {
|
||||
bind("server.undertow.threads.io=4");
|
||||
ConfigurableUndertowWebServerFactory factory = mock(ConfigurableUndertowWebServerFactory.class);
|
||||
this.customizer.customize(factory);
|
||||
verify(factory).setIoThreads(4);
|
||||
}
|
||||
|
||||
@Test
|
||||
void customizeWorkerThreads() {
|
||||
bind("server.undertow.threads.worker=10");
|
||||
ConfigurableUndertowWebServerFactory factory = mock(ConfigurableUndertowWebServerFactory.class);
|
||||
this.customizer.customize(factory);
|
||||
verify(factory).setWorkerThreads(10);
|
||||
}
|
||||
|
||||
@Test
|
||||
void allowEncodedSlashes() {
|
||||
bind("server.undertow.allow-encoded-slash=true");
|
||||
|
||||
@@ -139,9 +139,9 @@ class ServletWebServerFactoryCustomizerTests {
|
||||
@Test
|
||||
void testCustomizeTomcatMinSpareThreads() {
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("server.tomcat.min-spare-threads", "10");
|
||||
map.put("server.tomcat.threads.min-spare", "10");
|
||||
bindProperties(map);
|
||||
assertThat(this.properties.getTomcat().getMinSpareThreads()).isEqualTo(10);
|
||||
assertThat(this.properties.getTomcat().getThreads().getMinSpare()).isEqualTo(10);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
server.compression.enabled: true
|
||||
server.compression.min-response-size: 1
|
||||
server.jetty.acceptors=2
|
||||
server.jetty.threads.acceptors=2
|
||||
|
||||
Reference in New Issue
Block a user