一尘不染

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

spring-boot

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

现在spring尝试初始化一个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

阅读 256

收藏
2020-05-30

共1个答案

一尘不染

供参考:《Spring Boot参考指南》中记录了该用例:

并非所有的Spring应用程序都必须是Web应用程序(或Web服务)。如果您想在一个main方法中执行一些代码,又要引导一个Spring应用程序来设置要使用的基础架构,那么使用SpringApplicationSpring
Boot 的功能很容易。A
根据是否认为需要Web应用程序来SpringApplication更改其ApplicationContext类。您可以做的第一件事就是让servlet
API依赖项脱离类路径。如果您不能执行此操作(例如,您从同一代码库运行2个应用程序),则可以显式调用SpringApplication.setWebEnvironment(false)或设置applicationContextClass属性(通过Java
API或使用外部属性)。可以将您要作为业务逻辑运行的应用程序代码实现为,CommandLineRunner然后作为@Bean 定义。

application.properties:

spring.main.web-environment=false   #webEnvironment property
2020-05-30