2016-08-01 2 views
3

Я пытаюсь избежать сканирования компонентов, чтобы сократить время запуска в наших модульных тестах и ​​в нашем веб-приложении в целом.Как запустить веб-приложение Spring Boot без использования ComponentScan

Когда я заменяю @SpringBootApplication с @SpringBootConfiguration @EnableAutoConfiguration, я получаю следующее сообщение об ошибке:

Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean

Могу ли я вручную импортировать EmbeddedServletContainerFactory каким-то образом?

+0

Да, вы можете «реплицировать» конфигурацию внутри кода (аннотированная конфигурация), даже если код является сторонней библиотекой. Фактически, это полезно, когда вы должны переопределить конфигурацию по какой-либо причине. В моих тестах разница между использованием сканирования компонента или нет минимальна. Я бы избегал этого. – rdllopes

+2

Взгляните на 'org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration'. Вот как Spring-Boot создает «EmbeddedServletContainerFactory». Я не могу сказать, почему у вас нет одного в вашем тесте без дополнительной информации (попробуйте выполнить отладку условий, если вы хотите знать, почему), но если вы хотите зарегистрировать свою собственную фабрику, просто скопируйте соответствующий 'EmbeddedServletContainerFactory 'bean configuration from' EmbeddedServletContainerAutoConfiguration'. – Pieter

ответ

2

Miloš и Pieter предоставили средства для поиска ответа. Минимальная Спринг загрузки веб-приложений может быть запущена со следующим:

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

ServerPropertiesAutoConfiguration.class также может быть полезно, чтобы забрать вещи, как номер порта для приложения.

3

Мое предложение - сначала запустить приложение с флагом отладки и записать все активированные автоконфигурации. Затем отключите автоматическую настройку и импортируйте эти конфигурации, используя @Import в своем классе приложения.

В качестве альтернативы вы можете посмотреть каждый из этих классов конфигурации и посмотреть, какие настройки Spring Boot настроены для вас, и решить, хотите ли вы вместо этого предоставить свои собственные конфигурации - вы можете просто имитировать классы автоматической настройки, и все должно работать одинаково путь.

Смежные вопросы