Commit 34eb3695 authored by Quinten De Swaef's avatar Quinten De Swaef Committed by Andy Wilkinson

Allow Tomcat's minimum threads to be configured via the environment

Closes gh-5572
parent ca716561
......@@ -580,6 +580,11 @@ public class ServerProperties
*/
private int maxThreads = 0; // Number of threads in protocol handler
/**
* Minimum amount of worker threads.
*/
private int minSpareThreads = 0; //Number of minimum spare threads in protocol handler
/**
* Maximum size in bytes of the HTTP message header.
*/
......@@ -598,6 +603,14 @@ public class ServerProperties
this.maxThreads = maxThreads;
}
public int getMinSpareThreads() {
return minSpareThreads;
}
public void setMinSpareThreads(int minSpareThreads) {
this.minSpareThreads = minSpareThreads;
}
public int getMaxHttpHeaderSize() {
return this.maxHttpHeaderSize;
}
......@@ -684,6 +697,9 @@ public class ServerProperties
if (this.maxThreads > 0) {
customizeMaxThreads(factory);
}
if (this.minSpareThreads > 0) {
customizeMinThreads(factory);
}
if (this.maxHttpHeaderSize > 0) {
customizeMaxHttpHeaderSize(factory);
}
......@@ -747,6 +763,22 @@ public class ServerProperties
});
}
@SuppressWarnings("rawtypes")
private void customizeMinThreads(TomcatEmbeddedServletContainerFactory factory) {
factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
ProtocolHandler handler = connector.getProtocolHandler();
if (handler instanceof AbstractProtocol) {
AbstractProtocol protocol = (AbstractProtocol) handler;
protocol.setMinSpareThreads(Tomcat.this.minSpareThreads);
}
}
});
}
@SuppressWarnings("rawtypes")
private void customizeMaxHttpHeaderSize(
TomcatEmbeddedServletContainerFactory factory) {
......
......@@ -258,6 +258,14 @@ public class ServerPropertiesTests {
assertThat(this.properties.getTomcat().getMaxHttpHeaderSize()).isEqualTo(9999);
}
@Test
public void testCustomizeTomcatMinSpareThreads() throws Exception {
Map<String, String> map = new HashMap<String, String>();
map.put("server.tomcat.min-spare-threads", "10");
bindProperties(map);
assertThat(this.properties.getTomcat().getMinSpareThreads()).isEqualTo(10);
}
@Test
public void customizeTomcatDisplayName() throws Exception {
Map<String, String> map = new HashMap<String, String>();
......
......@@ -204,6 +204,7 @@ content into your application; rather pick only the properties that you need.
172\\.3[0-1]{1}\\.\\d{1,3}\\.\\d{1,3} # regular expression matching trusted IP addresses.
server.tomcat.max-http-header-size=0 # Maximum size in bytes of the HTTP message header.
server.tomcat.max-threads=0 # Maximum amount of worker threads.
server.tomcat.min-spare-threads=0 # Maximum amount of worker threads.
server.tomcat.port-header=X-Forwarded-Port # Name of the HTTP header used to override the original port value.
server.tomcat.protocol-header= # Header that holds the incoming protocol, usually named "X-Forwarded-Proto".
server.tomcat.protocol-header-https-value=https # Value of the protocol header that indicates that the incoming request uses SSL.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment