【问题标题】:How to force Spring Boot to use Tomcat server in integration tests?如何强制 Spring Boot 在集成测试中使用 Tomcat 服务器?
【发布时间】:2016-06-21 01:33:26
【问题描述】:

我使用默认的 Tomcat 嵌入式容器。但是,在我的一些测试中,我使用了 Wiremock(在下面使用 Jetty)。这使得我的集成测试针对 Jetty 服务器而不是 Tomcat 运行。

有什么办法可以强制 Spring Boot 坚持使用 Tomcat 吗?

【问题讨论】:

    标签: java spring-boot


    【解决方案1】:

    正如 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();
        }
    }
    

    【讨论】:

    【解决方案2】:

    对于 Spring Boot 2.3,上述解决方案对我不起作用。

    也许我有特殊情况,主类中没有SpringBootApplication。我在测试类中只有一个SpringBootApplication

    无论如何这对我有用:

    @SpringBootApplication(exclude = org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration.class)
    public class TestApplication {
    }
    

    【讨论】:

      猜你喜欢
      • 2015-08-02
      • 2017-01-22
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 2015-10-03
      • 2015-06-24
      • 1970-01-01
      相关资源
      最近更新 更多