2016-08-01 92 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为您配置的内容,并决定是否要提供自己的配置 - 您可以模仿自动配置类,并且所有内容都应该可以工作办法。

相关问题