代码之家  ›  专栏  ›  技术社区  ›  user2337270

是否强制Spring Boot不使用EmbeddedWebApplicationContext?

  •  0
  • user2337270  · 技术社区  · 11 年前

    我有一个斯波克测试用例,我想加载一个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应用程序。类似于:

    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的其他资源。类路径上还有其他几个应用程序上下文,当然还有jar文件暗示了web服务之类的东西,但我非常惊讶的是,类路径上的内容应该优先于通过webEnvironment属性进行的显式配置。我使用Gradle 1.12作为构建系统,Spring Boot版本是1.1.4,我使用的是Groovy 2.3.6和Spock 0.7-Groovy-2.0。在此方面的任何帮助都将不胜感激。

    我在这里做的事情完全不正常吗?谢谢

    2 回复  |  直到 11 年前
        1
  •  1
  •   anthavio    11 年前

    如果您没有编写测试,因此无法使用@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中验证

        2
  •  0
  •   Community Mohan Dere    9 年前

    您可能不应该像现在这样自行引导Spring Boot应用程序上下文。

    以下代码在不启动嵌入式servlet容器的情况下创建了一个集成测试环境(尽管如果您想启动嵌入式servlet容器,只需添加几个注释就可以轻松完成):

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

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

    退房 this 部分Spring Boot官方文档和 this SO问题