
Baeldung Pro comes with both absolutely No-Ads as well as finally with Dark Mode, for a clean learning experience:
Once the early-adopter seats are all used, the price will go up and stay at $33/year.
Last updated: April 16, 2025
When we want to enable or disable the embedded Tomcat server in a Spring Boot application, we need to consider different approaches based on our application’s requirements. By default, Spring Boot provides an embedded Tomcat server, but in some cases, we might want to disable it.
For applications that require an embedded server, we can use the default configuration. However, for applications that do not expose web endpoints or need to run as background services, disabling Tomcat can optimize resource usage.
In this tutorial, we’ll explore when to enable or disable the embedded Tomcat server and how to configure Spring Boot profiles to achieve this dynamically.
Spring Boot simplifies application deployment by bundling an embedded Tomcat server within the application’s executable JAR file. This approach eliminates the need to install and configure an external Tomcat instance, making development and deployment more efficient for us.
Spring Boot uses Spring Boot Starters to include the necessary dependencies for embedded Tomcat. The default starter, spring-boot-starter-web, automatically configures and initializes Tomcat when present in the classpath.
Spring Boot’s embedded Tomcat server offers several benefits:
While embedded Tomcat is useful, there are cases where disabling it is beneficial to us:
Spring Boot provides us with the spring.profiles.active property to define environment-specific configurations. We can create different profile-based configurations to control whether our embedded Tomcat server is enabled or not.
To define profiles, we typically create separate configuration files such as:
Spring Boot determines whether to enable an embedded web server based on the spring.main.web-application-type property. We can set it to NONE to disable the embedded Tomcat.
To do this in a profile-specific configuration, we modify the application-batch.properties file:
spring.main.web-application-type=NONE
When this profile is active, Spring Boot will not start Tomcat, treating the application as a non-web service.
Alternatively, we can configure this setting using YAML:
spring:
main:
web-application-type: NONE
Let’s configure an application with two profiles:
To ensure that our embedded Tomcat server starts normally, let’s set the property in our application-dev.properties file:
spring.main.web-application-type=SERVLET
To disable our embedded Tomcat server for batch processing, let’s set the property in our application-batch.properties file:
spring.main.web-application-type=NONE
Once we’ve defined multiple profile configurations, we can activate the desired profile via the application.properties file:
spring.profiles.active=batch
Alternatively, we can pass it as a command-line argument:
java -Dspring.profiles.active=batch -jar myapp.jar
This flexibility allows us to switch between web-enabled and non-web modes as needed during development, testing, or production deployment.
Spring Boot allows flexible configuration of the embedded Tomcat server using profiles. By leveraging spring.main.web-application-type, we can disable Tomcat when needed for non-web applications, optimizing resource usage and deployment configurations. Using profile-based settings or dynamic Java logic ensures that our application adapts to different environments seamlessly.