繁体   English   中英

强制Spring Boot不使用EmbeddedWebApplicationContext?

[英]Forcing Spring Boot to NOT use EmbeddedWebApplicationContext?

我有一个Spock测试用例,我想在其中加载Spring应用程序。 我有一个非常基本的Groovy类,它是我的配置对象:

@Configuration
@EnableAutoConfiguration
class TestConfig {
  @Bean
  Map createSillyMsgMap() {
    ["sillyMsg" : "This is a silly message"]
  }
  public static void main(String[] args) {
    println "TestConfig.main(${args})"
  }
}

显然,这不是很有用,但仅作为示例。 为了方便起见,我还在该类中添加了main方法。 我的测试类只是尝试将其实例化为Spring Boot Application。 像这样:

class AppContextSpec extends Specification {
  def "testSpringApplication"() {
    given: "a Spring Configuration"
    SpringApplication app = new SpringApplication(TestConfig)
    app.headless = true 
    app.webEnvironment = false
    app.applicationContextClass = AnnotationConfigApplicationContext

    expect: "the Spring Application to be able to start"
    ConfigurableApplicationContext ctxt = app.run((String[]) ["blah"])
  }
}

我试图通过将webEnvironment属性显式设置为false来强制Spring Boot不使用EmbeddedWebApplicationContext。 但是,不管我做什么,Spring Boot坚持要启动Tomcat服务器,并且它的确确实在源树中引入了其他带有@Component和/或@Configuration标记的资源。 类路径上还有其他一些应用程序上下文,当然也有暗示Web服务的jar文件,但是让我感到惊讶的是,类路径上的内容优先于通过webEnvironment属性进行的显式配置。 我正在使用Gradle 1.12作为构建系统,并且Spring Boot版本是1.1.4,并且正在将Groovy 2.3.6与Spock 0.7-groovy-2.0一起使用。 任何帮助,不胜感激。

我在这里做的事情完全不合常理吗? 谢谢。

如果您不编写测试,因此不能使用@ContextConfiguration

而不是简单的SpringApplication.run(MyDomainSpringConfig.class, args);

像这样构造并运行您的SpringApplication ...

SpringApplication application = new SpringApplication(MyDomainSpringConfig.class);
application.setApplicationContextClass(AnnotationConfigApplicationContext.class);
application.run(args);

在Spring Boot 1.2.1中验证

您可能不应该像自己那样尝试自行引导Spring Boot应用程序上下文。

以下代码在不启动嵌入式servlet容器的情况下创建了一个集成测试环境(尽管如果要启动嵌入式servlet容器,使用另外两个批注非常容易):

@ContextConfiguration(loader = SpringApplicationContextLoader.class, classes = TestConfig.class)
class ExampleSpec extends Specification {

    // ...

}

您还必须在测试类路径上存在'org.spockframework:spock-spring:0.7-groovy-2.0'依赖项

查看Spring Boot官方文档的这一部分以及这个 SO问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM