如何防止spring-web的spring-boot自动配置?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (91)

我在maven pom中使用spring-boot并添加了spring-web依赖项,以利用它RestTemplate

现在春天尝试初始化一个EmbeddedServletContext。我怎样才能防止它?

Exception in thread "main" org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:183)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:156)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
    ... 8 more
提问于
用户回答回答于

供参考:此用例在Spring Boot参考指南中有记录

并非所有的Spring应用程序都必须是Web应用程序(或Web服务)。如果你想在一个main方法中执行一些代码,并且引导一个Spring应用程序来设置要使用的基础设施,那么使用SpringApplicationSpring Boot 的特性很容易。A 根据是否认为需要Web应用程序来SpringApplication更改其ApplicationContext类。你可以做的第一件事就是把servlet API的依赖关系放在类路径之外。如果你不能这样做(例如,你从同一个代码库运行2个应用程序),那么你可以显式调用SpringApplication.setWebEnvironment(false)或设置applicationContextClass属性(通过Java API或外部属性)。您想要作为业务逻辑运行的应用程序代码可以作为a实现,CommandLineRunner并作为a 放入上下文中@Bean 定义。

application.properties:

spring.main.web-environment=false   #webEnvironment property
用户回答回答于

第一招:

public static void main(String[] args) throws Exception {
    ConfigurableApplicationContext ctx = new SpringApplicationBuilder(Application.class)
                .web(false)
                .run(args);
}

第二:

@Configuration
@EnableAutoConfiguration(exclude = WebMvcAutoConfiguration.class)
public class Application {

扫码关注云+社区

领取腾讯云代金券