我使用默认的Tomcat嵌入式容器。但是,在我的一些测试中,我使用Wiremock(在下面使用Jetty)。这使我的集成测试针对Jetty服务器运行,而不是Tomcat。
有没有办法强制Spring Boot坚持使用Tomcat?
答案 0 :(得分:9)
正如StéphaneNicoll所说here你应该定义一个空的TomcatEmbeddedServletContainerFactory
@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();
}
}
答案 1 :(得分:0)
使用Spring Boot 2.3时,上述解决方案对我不起作用。
也许我有特殊的情况,主要班级中没有SpringBootApplication
。我的考试班只有SpringBootApplication
。
无论如何,这对我有用:
@SpringBootApplication(exclude = org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration.class)
public class TestApplication {
}