【发布时间】:2016-06-21 01:33:26
【问题描述】:
我使用默认的 Tomcat 嵌入式容器。但是,在我的一些测试中,我使用了 Wiremock(在下面使用 Jetty)。这使得我的集成测试针对 Jetty 服务器而不是 Tomcat 运行。
有什么办法可以强制 Spring Boot 坚持使用 Tomcat 吗?
【问题讨论】:
标签: java spring-boot
我使用默认的 Tomcat 嵌入式容器。但是,在我的一些测试中,我使用了 Wiremock(在下面使用 Jetty)。这使得我的集成测试针对 Jetty 服务器而不是 Tomcat 运行。
有什么办法可以强制 Spring Boot 坚持使用 Tomcat 吗?
【问题讨论】:
标签: java spring-boot
正如 Stéphane Nicoll 所说的 here,您应该定义一个空的 TomcatEmbeddedServletContainerFactory @Bean
仅仅添加这样的 bean 对我来说是不够的。我得到了“多个豆子”异常。当我将它添加到自定义测试启动器时,我必须确保它是在 EmbeddedServletContainerAutoConfiguration 分辨率发生之前添加的,即:
@Configuration
@AutoConfigureBefore(EmbeddedServletContainerAutoConfiguration.class)
public class ForceTomcatAutoConfiguration {
@Bean
TomcatEmbeddedServletContainerFactory tomcat() {
return new TomcatEmbeddedServletContainerFactory();
}
}
编辑:在 Spring Boot 2.0 中这对我有用:
@Configuration
@AutoConfigureBefore(ServletWebServerFactoryAutoConfiguration.class)
public class ForceTomcatAutoConfiguration {
@Bean
TomcatServletWebServerFactory tomcat() {
return new TomcatServletWebServerFactory();
}
}
【讨论】:
对于 Spring Boot 2.3,上述解决方案对我不起作用。
也许我有特殊情况,主类中没有SpringBootApplication。我在测试类中只有一个SpringBootApplication。
无论如何这对我有用:
@SpringBootApplication(exclude = org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration.class)
public class TestApplication {
}
【讨论】: