2016-08-01 132 views
3

我試圖避免使用組件掃描來減少我們的模塊測試以及我們的Web應用程序中的啓動時間。如何在不使用ComponentScan的情況下啓動Spring Boot Web應用程序

當我更換@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 'EmbeddedServletContainerAutoConfiguration'中的bean配置。 – Pieter

回答

2

MilošPieter提供了找到答案的方法。一個最小的春天啓動Web應用程序可以使用以下方法啓動:

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

ServerPropertiesAutoConfiguration.class也可以得心應手地收拾東西像應用程序的端口號。

3

我的建議是首先運行帶有調試標誌的應用程序,並寫下所有激活的自動配置。然後,通過在應用程序類上使用@Import,禁用自動配置並導入這些配置。

或者,您可以查看每個配置類,並查看Spring Boot爲您配置的內容,並決定是否要提供自己的配置 - 您可以模仿自動配置類,並且所有內容都應該可以工作辦法。

相關問題