spring boot是由pivotal團隊提供的全新框架,其設計目的是用來簡化新spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,spring boot致力于在蓬勃發展的快速應用開發領域(rapid application development)成為領導者。
spring boot繼承了spring的優點,并新增了一些新功能和特性:
(1)springboot是伴隨著spring4.0誕生的,一經推出,引起了巨大的反向;
(2)從字面理解,boot是引導的意思,因此springboot幫助開發者快速搭建spring框架;
(3)springboot幫助開發者快速啟動一個web容器;
(4)springboot繼承了原有spring框架的優秀基因;
(5)springboot簡化了使用spring的過程;
(6)spring boot為我們帶來了腳本語言開發的效率,但是spring boot并沒有讓我們意外的新技術,都是java ee開發者常見的額技術。
spring boot工程的默認web容器是tomcat,但是開發人員可以根據需要修改,例如使用jetty或者undertow,spring boot提供了對應的starters。
how do
- 在pom文件中排除tomcat的starter
1
2
3
4
5
6
7
8
9
10
|
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> <exclusions> <exclusion> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-tomcat</artifactid> </exclusion> </exclusions> </dependency> |
- 增加jetty依賴
1
2
3
4
|
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-jetty</artifactid> </dependency> |
- 通過mvn spring-boot:run命令啟動,可以看到jetty已經啟動。
jetty容器啟動
ps:如果您使用的gradle,則可以參考官方文檔的做法——use jetty instead of tomcat
分析
支持上述切換的原因是spring boot的自動配置。我首先在spring-boot-starter-web依賴中排除tomcat依賴,免得它跟jetty形成依賴沖突。spring boot根據在classpath下掃描到的容器類的類型決定使用哪個web容器。
在idea中查看embeddedservletcontainerautoconfiguration類的內部結構,可以看到@conditionalonclass({servlet.class, server.class, loader.class, webappcontext.class})
這樣的條件匹配注解,如果在jetty的jar包中可以找到上述三個類的實例,則決定使用jetty容器。
1
2
3
4
5
6
7
8
9
10
11
12
|
@configuration @conditionalonclass ({servlet. class , server. class , loader. class , webappcontext. class }) @conditionalonmissingbean ( value = {embeddedservletcontainerfactory. class }, search = searchstrategy.current) public static class embeddedjetty { public embeddedjetty() { } @bean public jettyembeddedservletcontainerfactory jettyembeddedservletcontainerfactory() { // 返回容器工廠實例,用于構造容器實例 return new jettyembeddedservletcontainerfactory(); } } |
同樣得,可以看到對tomcat也存在類似的判斷和使用代碼:
1
2
3
4
5
6
7
8
9
10
11
|
@configuration @conditionalonclass ({servlet. class , tomcat. class }) @conditionalonmissingbean ( value = {embeddedservletcontainerfactory. class }, search = searchstrategy.current) public static class embeddedtomcat { public embeddedtomcat() { } @bean public tomcatembeddedservletcontainerfactory tomcatembeddedservletcontainerfactory() { return new tomcatembeddedservletcontainerfactory(); } } |
總結
以上所述是小編給大家介紹的選擇spring boot項目的內嵌容器,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:http://www.jianshu.com/p/70233f90859c