Hello Friends!! Today we would be discussing how to check the embedded Tomcat server properties in Spring Boot. You must be thinking why would we ever want to check the Tomcat properties because we are the one who has set these properties using Spring Boot's configuration file i. e. application.yml / application.properties. But let me first tell you the reason behind it, why I have travelled this extra mile and then we would see how to check the properties?
Recently, I have came across the requirement for setting up the maxSwallowSize property in the embedded Tomcat server of my Spring Boot application which I did it successfully by using Java configuration because as of now while writing this post, this property can't be configured using Spring Boot's configuration file i. e. application.yml / application.properties.
For configuring maxSwallowSize property, I have used TomcatConnectorCustomizer interface and then associated it with the TomcatEmbeddedServletContainerFactory class that means manually registered TomcatEmbeddedServletContainerFactory bean in the main Spring Boot class. For more details on this, have a look at this write-up.
Now one question crossed our mind,
Does the manually configured Tomcat server honours the bootstrap. yml file containing some of the configured Tomcat server properties if not then do we have to set all the required properties like maxSwallowSize ?
Logically it should but we can't leave it as granted, we must be sure. That's why we find ourselves in first place to look out a way to check embedded Tomcat server properties.
For reference, bootstrap. yml file,
There are two ways for finding out the configured server properties of a embedded Tomcat server. Both involves, getting the required bean from application context and look out for the desired properties in debug mode.
ServerProperties.java class contains all the supported embedded servers in Spring Boot as the static inner class i.e. Tomcat, Jetty, Undertow [1]. That's why inspecting it in debug mode shows the Tomcat properties.
For reference, code snippet
Thank you for your time and see you in the next post. Happy Learning!!
Appendix:
[1]: ServerProperties.java
Q1. Why are we even interested in checking the Spring Boot's embedded Tomcat server properties ?
For configuring maxSwallowSize property, I have used TomcatConnectorCustomizer interface and then associated it with the TomcatEmbeddedServletContainerFactory class that means manually registered TomcatEmbeddedServletContainerFactory bean in the main Spring Boot class. For more details on this, have a look at this write-up.
Now one question crossed our mind,
Does the manually configured Tomcat server honours the bootstrap. yml file containing some of the configured Tomcat server properties if not then do we have to set all the required properties like maxSwallowSize ?
Logically it should but we can't leave it as granted, we must be sure. That's why we find ourselves in first place to look out a way to check embedded Tomcat server properties.
For reference, bootstrap. yml file,
spring: application: name: anshuls-blog # EMBEDDED SERVER CONFIGURATION server: port: 8081 tomcat: max-threads: 1000 # Maximum number of worker threads min-spare-threads: 40 # Minimum number of worker threads uri-encoding: UTF-8 # Character encoding to use to decode the URI
2. How to check embedded Tomcat server properties in spring boot?
There are two ways for finding out the configured server properties of a embedded Tomcat server. Both involves, getting the required bean from application context and look out for the desired properties in debug mode.
2.1 Get TomcatEmbeddedServletContainerFactory bean from Application Context
2.2 Get ServerProperties bean from Application Context
ServerProperties.java class contains all the supported embedded servers in Spring Boot as the static inner class i.e. Tomcat, Jetty, Undertow [1]. That's why inspecting it in debug mode shows the Tomcat properties.
For reference, code snippet
public void getEmbeddedTomcatInfoInSpringBoot() { TomcatEmbeddedServletContainerFactory tomcatServletContainerFactory = context.getBean(TomcatEmbeddedServletContainerFactory.class); Collection<TomcatConnectorCustomizer> tomcatConnectorCustomizers = tomcatServletContainerFactory.getTomcatConnectorCustomizers(); logger.info("URU Encoding:>>>>>>>>>" + tomcatServletContainerFactory.getUriEncoding()); logger.info("Port:>>>>>>>>>" + tomcatServletContainerFactory.getPort()); ServerProperties serverProperties = context.getBean(ServerProperties.class); logger.info("MaxThreads Property:>>>>>>>>>" + serverProperties.getTomcat().getMaxThreads()); logger.info("MinSpareThreads Property:>>>" + serverProperties.getTomcat().getMinSpareThreads()); logger.info("MinSpareThreads Property:>>>>>" + serverProperties.getTomcat().getUriEncoding()); }
Appendix:
[1]: ServerProperties.java
No comments:
Post a Comment