[英]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'
依賴項
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.