스프링 부트 정보웹 환경을 올바르게 비활성화하는 방법
스프링 부트 비웹 응용 프로그램 시작 시 다음 오류가 발생함
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
이번엔 효과가 있어
처음 두 가지 방법은 왜 작동하지 않는가?
스프링 부트 2.0 이후
-web(false)/setWebEnvironment(false)는 권장되지 않으며 대신 Web-Application-Type을 사용하여 지정할 수 있습니다.
-
spring.main.web-application-type=NONE # REACTIVE, SERVLET
또는 Spring Application Builder
@SpringBootApplication public class SpringBootDisableWebEnvironmentApplication { public static void main(String[] args) { new SpringApplicationBuilder(SpringBootDisableWebEnvironmentApplication.class) .web(WebApplicationType.NONE) // .REACTIVE, .SERVLET .run(args); } }
NONE
- 어플리케이션은 웹 어플리케이션으로 실행되어서는 안 되며 임베디드 웹 서버를 기동해서는 안 됩니다.REACTIVE
응용 프로그램은 사후 대응형 웹 응용 프로그램으로 실행되어야 하며 내장된 사후 대응형 웹 서버를 시작해야 합니다.SERVLET
- 응용 프로그램은 서블릿 기반 웹 응용 프로그램으로 실행되어야 하며 내장된 서블릿 웹 서버를 시작해야 합니다.
우대:다른 SO 답변
이 답변은 구식입니다.Spring Boot 2.0에 대한 다른 답변을 참고하십시오.
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.main.web-application-type=NONE
Spring-boot 2.x의 경우spring.main.web-environment=false
spring-boot 1.x의 경우
하지만 가장 간단한 해결책은 최선의 해결책이 아닙니다. 단지 빠르고 지저분할 뿐입니다.spring-boot에는 클래스 경로의 콘텐츠에 의해 트리거되는 많은 자동 구성이 있기 때문에 앱에 불필요한 웹 관련 종속성이 있을 수 있습니다.
Spring-batch 어플리케이션이 있어서
Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
그것은 의 존재에 의해 야기되었다.javax.servlet-api
내 POM에 저장해당.제거했더니 문제가 없어졌어요.
public static void main(String[] args) {
SpringApplication(Application.class)
.setWebApplicationType(WebApplicationType.NONE)
.run(args);
}
를 사용하는 대신SpringApplicationBuilder
.
언급URL : https://stackoverflow.com/questions/37187519/about-spring-boot-how-to-disable-web-environment-correctly
'it-source' 카테고리의 다른 글
Spring 프레임워크는 왜 Guava 캐시의 사용을 폐지했습니까? (0) | 2023.03.07 |
---|---|
JSON(iOS)을 사용한 코코아 오류 3840 (0) | 2023.03.07 |
JSON 명명 규칙(snake_case, camelCase 또는 PascalCase) (0) | 2023.03.07 |
리액트 라우터를 사용하여 사용자가 페이지를 떠나는 것을 감지하는 중 (0) | 2023.03.07 |
페이지 로드 시 웹 페이지 콘텐츠를 어떻게 div에 로드할 수 있습니까? (0) | 2023.03.07 |