Spring Boot總結(一):@SpringBootApplication的替代方案
阿新 • • 發佈:2019-02-20
對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作為開發除錯環境使用。