spring-web 용 스프링 부트 자동 설정을 방지하는 방법
사용하고 있다spring-boot
라고 덧붙였습니다.spring-web
이용하기 위해 maven pom의 의존성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 Reference Guide 」를 참조해 주세요.
모든 스프링 애플리케이션이 웹 애플리케이션(또는 웹 서비스)일 필요는 없습니다.에서 일부 코드를 실행하는 경우
main
Spring 어플리케이션을 부트스트랩하여 사용할 인프라스트럭처를 셋업할 수 있습니다.이렇게 하면,SpringApplication
Spring Boot의 특징입니다.aSpringApplication
변경하다ApplicationContext
웹 어플리케이션이 필요한지 여부에 따라 클래스가 달라집니다.이를 지원하기 위해 가장 먼저 할 수 있는 것은 servlet API 의존관계를 클래스 경로에서 제외하는 것입니다.그렇지 않은 경우(예를 들어 같은 코드베이스에서2개의 애플리케이션을 실행하고 있는 경우)에 명시적으로 문의할 수 있습니다.SpringApplication.setWebEnvironment(false)
또는 를 설정합니다.applicationContextClass
(Java API 또는 외부 속성을 통해) 속성을 지정합니다.비즈니스 로직으로 실행하는 애플리케이션 코드를CommandLineRunner
이 문맥에 빠져들었습니다.@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 {
기존 웹 환경 비활성화 방법(@Tim's Answer에서 설명한 바와 같이)은 Spring Boot 2.x에서도 동작하지만 새로운 권장 방법은 다음 속성을 설정하는 것입니다.
spring.main.web-application-type=none
다음은 허용되는 값을 정의하는 열거형입니다.
이것은 Spring Boot 2.x에서 동작합니다.
public static void main(String[] args) {
new SpringApplicationBuilder(MyApplication.class)
.web(WebApplicationType.NONE)
.build()
.run(args);
}
Spring Boot 2.06을 사용하여 리액티브 웹 앱을 구축하려고 했는데 다음 오류가 발생했습니다.
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:155) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) ~[spring-context-5.0.10.RELEASE.jar:5.0.10.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) [spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:386) [spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1242) [spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1230) [spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at com.vogella.springboot2.Test3Application.main(Test3Application.java:10) [main/:na]
Caused by: org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getWebServerFactory(ServletWebServerApplicationContext.java:204) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:178) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:152) ~[spring-boot-2.0.6.RELEASE.jar:2.0.6.RELEASE]
... 8 common frames omitted
이 링크는 문제를 설명하고 다음 두 가지 제안을 제시했습니다.
Spring Boot을 사용하여 새로운 Spring WebFlux 어플리케이션을 만들고 있었습니다.start.spring.io에서 프로젝트 템플릿을 다운로드 받은 후 서드파티 의존관계를 추가하여 어플리케이션을 시작하려고 했습니다.그 후 org.springframework.context 오류가 발생하였습니다.Application Context Exception:ServletWebServerFactory bean이 없어 ServletWebServerApplicationContext를 시작할 수 없습니다...
에러 메세지가 해결의 힌트입니다.Servlet Web Server Application Context를 시작할 수 없습니다라고 표시되어 있습니다만, 제 프로젝트는 Web Flux를 사용하고 있으며, 서블릿 기반의 Spring Web MVC 프로젝트가 아닌 반응형 웹 프로젝트입니다.
스프링 소스 코드로 디버깅하면 원인을 찾을 수 있습니다.이 메서드에서 duce Web Application은org.springframework.boot 유형입니다.Spring Application 웹 응용 프로그램 유형은 Web Application Type으로 설정됩니다.CLASSPATH에 Spring Web MVC 클래스가 존재하지 않는 경우에만 반응합니다.
근본 원인을 파악하면 해결이 쉬워집니다.다음 중 하나가 가능합니다.
spring-webmvc를 제외하도록 Maven 종속성을 업데이트하거나 웹 응용 프로그램 유형을 WebApplicationType으로 설정합니다.아래 그림과 같이 명시적으로 반응합니다.
@SpringBootApplication class MyApplication fun main(args: Array<String>) { val app = SpringApplication(MyApplication::class.java) app.webApplicationType = WebApplicationType.REACTIVE app.run(*args) }
유감스럽게도 두 솔루션 모두 제게는 효과가 없었습니다.지오앤드의내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거, 내 거.application.properties
:
spring.main.web-application-type=reactive
부라! 문제가 해결됐어!
언급URL : https://stackoverflow.com/questions/29800584/how-to-prevent-spring-boot-autoconfiguration-for-spring-web
'programing' 카테고리의 다른 글
캔 각도외부 앱에 의해 영구 모델(서버 데이터베이스)이 변경된 경우 JS에서 보기를 자동으로 업데이트하시겠습니까? (0) | 2023.03.14 |
---|---|
Oracle: 특정 범위에 걸쳐 "그룹화"하는 방법 (0) | 2023.03.14 |
AJAX를 사용하는 jQuery Select2 컨트롤에 동적으로 항목 추가 (0) | 2023.02.15 |
리액트 네이티브는 왜 자신을 정당화하지 않는가? (0) | 2023.02.15 |
정의되지 않은 함수 wp_mail 호출 (0) | 2023.02.15 |