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 EmbeddedServletContainerCustomizers, you also need to import EmbeddedServletContainerCustomizerBeanPostProcessorRegistrar.class.