2016-08-01 5 views
3

모듈 테스트 및 일반적인 웹 애플리케이션에서 시작 시간을 줄이기 위해 컴포넌트 스캔을 피하려고합니다.ComponentScan을 사용하지 않고 스프링 부트 웹 애플리케이션을 시작하는 방법

내가 @SpringBootConfiguration @EnableAutoConfiguration@SpringBootApplication 교체, 나는 다음과 같은 오류가 얻을 :

Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean

내가 수동으로 EmbeddedServletContainerFactory를 어떻게 든 가져올 수 있습니까?

+0

예, 코드가 제 3 자 라이브러리 인 경우에도 코드 (주석이 달린 구성) 내에 구성을 "복제"할 수 있습니다. 실제로 어떤 이유로 든 구성을 대체해야하는 경우에 유용합니다. 내 테스트에서는 구성 요소 스캔 사용과 사용하지 않음 간의 차이가 거의 없습니다. 나는 그것을 피할 것이다. – rdllopes

+2

'org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration'을 살펴보십시오. 이것은 spring-boot가'EmbeddedServletContainerFactory'를 생성하는 방법입니다. 이유가 무엇인지 알기 원한다면 조건을 디버그 해보는 것이 더 많은 정보없이 테스트에 포함되지 않은 이유를 말할 수는 없지만, 자신 만의 공장을 등록하려면 적절한 'EmbeddedServletContainerFactory 'EmbeddedServletContainerAutoConfiguration'의 bean 설정. – Pieter

답변

2

MilošPieter은 답을 찾기위한 수단을 제공했습니다. 최소한의 봄 부트 웹 응용 프로그램은 다음과 같이 시작할 수 있습니다

@SpringBootConfiguration 
@Import({EmbeddedServletContainerAutoConfiguration.class}) 
public class Application extends SpringBootServletInitializer { 
    ... 
} 

ServerPropertiesAutoConfiguration.class 또한 응용 프로그램에 대한 포트 번호와 같은 물건을 선택하는 것이 편리 할 수 ​​있습니다.

3

제 제안은 디버그 플래그를 사용하여 응용 프로그램을 실행하고 활성화 된 모든 자동 구성을 적어 두는 것입니다. 그런 다음 자동 구성을 사용하지 않도록 설정하고 응용 프로그램 클래스에서 @Import을 사용하여 해당 구성을 가져옵니다.

또는 각 구성 클래스를보고 스프링 부트가 구성하는 것을보고 대신 자신의 구성을 제공할지 결정할 수 있습니다. 자동 구성 클래스를 모방 할 수 있으며 모든 것이 동일하게 작동해야합니다 방법.