如何防止弹簧网的弹簧启动自动配置?

2022-09-01 07:11:00

我正在使用并添加了maven pom中的依赖项,以利用.spring-bootspring-webRestTemplate

现在,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

答案 1

参考:此用例记录在《Spring Boot 参考指南》中:

并非所有的Spring应用程序都必须是Web应用程序(或Web服务)。如果你想在方法中执行一些代码,但也引导一个Spring应用程序来设置要使用的基础设施,那么Spring Boot的功能很容易。A 会根据它是否认为需要 Web 应用程序来更改其类。为了帮助它,您可以做的第一件事就是将 servlet API 依赖项从类路径中移除。如果您无法做到这一点(例如,您正在从同一个代码库运行2个应用程序),那么您可以显式调用或设置属性(通过Java API或使用外部属性)。要作为业务逻辑运行的应用程序代码可以作为 实现,并作为定义放入上下文中。mainSpringApplicationSpringApplicationApplicationContextSpringApplication.setWebEnvironment(false)applicationContextClassCommandLineRunner@Bean

应用程序.属性:

spring.main.web-environment=false   #webEnvironment property

答案 2

第一招:

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 {

推荐