问题 如何避免Spring Boot加载EmbeddedWebApplicationContext?


我有一个带Camel-HTTP的Spring Boot集成应用程序。由于Camel-HTTP具有依赖性 geronimo-servlet Spring Boot正在尝试加载Web应用程序上下文。

我怎么能强迫Spring不加载 EmbeddedWebApplicationContext

我试图排除在中找到的所有AutoConfiguration类 org.springframework.boot.autoconfigure.web 随着 @EnableAutoConfiguration(exclude = ...) 注解。


9909
2018-03-23 09:35


起源



答案:


你可以使用 SpringApplicationBuilder 用于显式禁用加载Web环境和上下文的类, 即在你的主要班级:

public static void main(String[] args) {
    new SpringApplicationBuilder(MainConfig.class).web(false).run(args);
}

14
2018-03-23 12:07



那很有效!我正在做同样的事情 SpringApplication 代替 SprintApplicationBuilder,但它正在检测servlet并创建Web上下文。使用构建器,它工作正常。谢谢 - victor.hernandez
如果javax.servlet.Servlet或org.springframework.web.context.ConfigurableWebApplicationContext在类路径中,则无效。最好调用contextClass方法来指定AnnotationConfigApplicationContext。 - Constantino Cronemberger
@ConstantinoCronemberger web(false) 电话是在之后 initialize(sources) 方法,作为SAB / SA构造函数的一部分调用,所以不应该这样吗? - adam p
在我的例子中,webEnvironment被application.yml类中的“web-environment”属性覆盖。在我的情况下,我真的有一个Web应用程序,但我想创建另一个入口点,以便能够运行代码的特定部分而无需启动Tomcat。 - Constantino Cronemberger


答案:


你可以使用 SpringApplicationBuilder 用于显式禁用加载Web环境和上下文的类, 即在你的主要班级:

public static void main(String[] args) {
    new SpringApplicationBuilder(MainConfig.class).web(false).run(args);
}

14
2018-03-23 12:07



那很有效!我正在做同样的事情 SpringApplication 代替 SprintApplicationBuilder,但它正在检测servlet并创建Web上下文。使用构建器,它工作正常。谢谢 - victor.hernandez
如果javax.servlet.Servlet或org.springframework.web.context.ConfigurableWebApplicationContext在类路径中,则无效。最好调用contextClass方法来指定AnnotationConfigApplicationContext。 - Constantino Cronemberger
@ConstantinoCronemberger web(false) 电话是在之后 initialize(sources) 方法,作为SAB / SA构造函数的一部分调用,所以不应该这样吗? - adam p
在我的例子中,webEnvironment被application.yml类中的“web-environment”属性覆盖。在我的情况下,我真的有一个Web应用程序,但我想创建另一个入口点,以便能够运行代码的特定部分而无需启动Tomcat。 - Constantino Cronemberger


你可以尝试使用 @ContextConfiguration 注解:

@ContextConfiguration(loader = SpringApplicationCtxtLoader.class, classes = annotatedClass.class)

annotatedClass.class 是班级 注释,例如: @Component@Service@Repository

这个 回答这是用于测试目的的建议方法,但我认为它可能会对您有所帮助


0
2018-03-23 10:49



这可能适用于测试,但不适用于Spring Boot应用程序本身 - victor.hernandez