一尘不染

Spring Boot启用/禁用带有配置文件的嵌入式Tomcat

spring

我正在编写一个Spring Boot应用程序,该应用程序使用几个@Configuration类之一,具体取决于文件中@Profile设置的类application.properties

这些配置类之一使用REST接口,因此,我将其包括spring-boot-starter-web为依赖项。

这将启动嵌入式Tomcat实例,这很好。

问题是,其他配置文件不需要嵌入式服务器(例如,我使用JMS来处理传入消息而不是REST)。

有没有什么方法可以阻止@SpringBootApplicationTomcat在默认情况下启动,而仅将其用于REST Configuration类?例如,通过用@EnableWebMVC

这是我的@Configuration课程的一个示例:

REST:

@Profile({"REST"})
@Configuration
@EnableWebMvc
public class HttpConfiguration{
 .
 .
 .
}

JMS:

@Profile({"JMS"})
@Configuration
@EnableJms
public class JMSConfiguration{
 .
 .
 .
}

谢谢


阅读 610

收藏
2020-04-20

共1个答案

一尘不染

使用

@SpringBootApplication(exclude = {EmbeddedServletContainerAutoConfiguration.class, 
                                  WebMvcAutoConfiguration.class})

排除Spring Boot对嵌入式Servlet容器的自动配置。此外,你需要为非REST案例设置以下属性,以使Spring Boot不会尝试启动REST WebApplicationContext(需要一个servlet容器):

spring.main.web-environment=false

然后通过导入在REST配置文件中启用嵌入式Tomcat EmbeddedServletContainerAutoConfiguration.class(这将自动配置延迟到REST配置文件加载后:

@Profile({"REST"})
@Configuration
@Import(EmbeddedServletContainerAutoConfiguration.class)
public class HttpConfiguration {
    // ...
}

如果使用任何EmbeddedServletContainerCustomizer,还需要导入EmbeddedServletContainerCustomizerBeanPostProcessorRegistrar.class

2020-04-20