Let's get started with a Microservice Architecture with Spring Cloud:
Enable or Disable Embedded Tomcat with Profile in Spring Boot
Last updated: April 16, 2025
1. Overview
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.
2. Understanding Embedded Tomcat in Spring Boot
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.
2.1. Advantages of Embedded Tomcat
Spring Boot’s embedded Tomcat server offers several benefits:
- Simplified deployment: No need to install an external Tomcat server
- Self-contained applications: The application can be packaged as a JAR file and run anywhere
- Automatic configuration: Spring Boot configures Tomcat automatically based on dependencies
- Flexibility: Can be easily replaced with other embedded servers like Jetty or Undertow
2.2. When to Disable Tomcat Server
While embedded Tomcat is useful, there are cases where disabling it is beneficial to us:
- Non-web applications: Applications that don’t serve HTTP requests, such as CLI tools or batch jobs
- Microservices with alternative servers: Some services may use a dedicated web server like Nginx
- Resource optimization: Disabling Tomcat reduces memory and CPU usage
3. Configuring Spring Boot Profiles
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:
- application-dev.properties (for development with Tomcat enabled)
- application-batch.properties (for batch processing without Tomcat)
4. Disabling Embedded Tomcat with Profiles
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
5. Example Configuration for Different Profiles
Let’s configure an application with two profiles:
- Development Profile (dev) – Tomcat enabled (default setting).
- Batch Profile (batch) – Tomcat disabled.
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
6. Switching Between Profiles
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.
7. Conclusion
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.















