Spring boot enable/disable embedded tomcat with profile
As of Spring Boot 2.0 only spring.main.web-application-type=none
in the relevant profile do the trick.
If you use a multi-document application.yml
with Spring Boot 2.0, adding this block and replacing no-web-profile-name
with the profile that shouldn't have an embedded web server should work:
---
spring:
profiles: no-web-profile-name
main:
web-application-type: none
Use
@SpringBootApplication(exclude = {EmbeddedServletContainerAutoConfiguration.class,
WebMvcAutoConfiguration.class})
to exclude Spring Boot's auto-configuration for embedded servlet containers. Additionally, you need to set the following property for the non-REST cases, so that Spring Boot won't try to start a WebApplicationContext
(which needs a servlet container):
spring.main.web-environment=false
Then enable the embedded Tomcat in your REST profile by importing EmbeddedServletContainerAutoConfiguration.class
(this delays the autoconfiguration until after the REST profile has been loaded:
@Profile({"REST"})
@Configuration
@Import(EmbeddedServletContainerAutoConfiguration.class)
public class HttpConfiguration {
// ...
}
If you are using any EmbeddedServletContainerCustomizer
s, you also need to import EmbeddedServletContainerCustomizerBeanPostProcessorRegistrar.class
.