簡體   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