1. 程式人生 > >Spring Boot總結(一):@SpringBootApplication的替代方案

Spring Boot總結(一):@SpringBootApplication的替代方案

對Spring Boot而言,@SpringBootApplication的作用就是@Configuration, @EnableAutoConfiguration與@ComponentScan的集合,所以也會存在@EnableAutoConfiguration的粒度管理問題。

新增@EnableAutoConfiguration時(請務必注意,一個Spring Boot程式最好只新增唯一一個這樣的註解),由於Spring Boot是根據程式載入的jar包自動新增配置,所以就會導致自動配置一些不必要的配置,效能浪費倒是小事,關鍵是控制力度與問題難以追蹤。

基於以上的原因,一般而言,@EnableAutoConfiguration只適用於初學者,對控制力與把控力要求的架構師或高階使用者顯然是不合適的,所以有必要找到@SpringBootApplication的替代方案,自己控制Bean建立的過程與數量,替代方案如下:

//@SpringBootApplication
@Configuration
@ImportResource({"classpath:/META-INF/service-context.xml", "classpath:/META-INF/mvc-context.xml"})
public class AppBooter extends SpringBootServletInitializer {

    /**
     * 所有配置資訊的入口
     * @param application
     * @return 
     */
    @Override
    protected
SpringApplicationBuilder configure(SpringApplicationBuilder application) { // 啟用配置資訊 return application.sources(AppBooter.class); } /** * 啟動應用程式 * @param args */ public static void main(String[] args) { SpringApplication.run(AppBooter.class, args); } /** * 非常重要,啟用內建的Servlet容器 */
@Bean public EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); // 可以操控到更細力度 factory.setPort(9000); factory.setSessionTimeout(10, TimeUnit.MINUTES); factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/notfound.html")); return factory; } }

結論

其實,在實際生產環境中,我們很少會直接釋出基於Spring Boot的WEB應用程式,因為為此單獨開發一套叢集管理方案還是開銷還是太大,所以建議將Spring Boot作為開發除錯環境使用。