关于Spring Boot如何正确禁用Web环境

Spring Boot" title="Spring Boot">Spring Boot非Web应用程序启动时出现以下错误

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:185) ~[spring-boot-1.3.5.RELEASE.jar:1.3.5.RELEASE]

然后我尝试下面的方式

new SpringApplication().setWebEnvironment(false);

然后启动它仍然有上面的错误。

然后尝试

@SpringBootApplication(exclude={SpringDataWebAutoConfiguration.class})

但仍然有相同的错误。

最后我尝试添加以下配置 application.properties

spring.main.web-environment=false

这次它起作用了。

为什么前两种方式不起作用?

回答:

Spring Boot 1.x的原始答案:

此配置不起作用的原因是,这是两个不同的实例:

new SpringApplication().setWebEnvironment(false); 

SpringApplication.run(SpringBootDisableWebEnvironmentApplication.class, args);

要禁用setWebEnvironment(false)new

SpringApplication()对象,并调用静态方法run()SpringApplication.run(...)是不同的。

我想出了三种方法来做到这一点:

@SpringBootApplication

public class SpringBootDisableWebEnvironmentApplication implements CommandLineRunner{

public static void main(String[] args) throws Exception {

// Method#1: Using SpringApplicationBuilder.

SpringApplication springApplication =

new SpringApplicationBuilder()

.sources(SpringBootDisableWebEnvironmentApplication.class)

.web(false)

.build();

springApplication.run(args);

//--------------------------------------------------------

// Method#2: Using SpringBootDisableWebEnvironmentApplication.

// SpringBootDisableWebEnvironmentApplication springBootDisableWebEnvironmentApplication =

// new SpringBootDisableWebEnvironmentApplication();

// springBootDisableWebEnvironmentApplication.run(args);

//--------------------------------------------------------

// Method#3: Using SpringApplication().

// SpringApplication springApplication = new SpringApplication();

// springApplication.setWebEnvironment(false);

//

// Set<Object> sources = new HashSet<>();

// sources.add(SpringBootDisableWebEnvironmentApplication.class);

// springApplication.setSources(sources);

// springApplication.run(args);

//--------------------------------------------------------

}

@Override

public void run(String... arg0) throws Exception {

System.out.println("Hello, Spring Boot gives many options ;)");

}

}

这是完整的工作项目。

而且您不需要排除以下配置:

@SpringBootApplication(exclude = {EmbeddedServletContainerAutoConfiguration.class, 

WebMvcAutoConfiguration.class})

因为你没有spring-boot-starter-web依赖性pom.xml

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

以上是 关于Spring Boot如何正确禁用Web环境 的全部内容, 来源链接: utcz.com/qa/434672.html

回到顶部