gpt4 book ai didi

java - 强制 Spring Boot 不使用 EmbeddedWebApplicationContext?

转载 作者:行者123 更新时间:2023-12-01 12:39:29 24 4
gpt4 key购买 nike

我有一个 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 应用程序。像这样的事情:

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 中验证

关于java - 强制 Spring Boot 不使用 EmbeddedWebApplicationContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25253893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com