【Spring Boot】內(nèi)嵌容器

Spring Boot內(nèi)嵌容器支持Tomcat爆侣、Jetty盯桦、Undertow。

tomcat容器

spring boot 的web應(yīng)用開發(fā)必須使用spring-boot-starter-web绪爸,其默認嵌入的servlet容器是Tomcat界睁。

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>1.4.3.RELEASE</version>
</parent>
 
<dependencies>
   <!-- TOMCAT -->
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
</dependencies>

嵌入的servlet容器版本在pom的以下父依賴項中定義,比如上面的version1.4.3引入了Tomcat版本8.5.6彻亲。
如果想改變tomcat版本孕锄,也可以更改pom.xml或application.properties文件中的屬性進行修改:
application.properties 文件修改:

<properties>
   <tomcat.version>8.5.6</tomcat.version></properties>

pom.xml文件修改:

<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-core</artifactId>
   <version>${tomcat.version}</version>
</dependency>
<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-el</artifactId>
   <version>${tomcat.version}</version>
</dependency>
<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-websocket</artifactId>
   <version>${tomcat.version}</version>
</dependency>

如果想使用其他容器,可以移除tomcat容器睹栖,具體看下面容器的介紹硫惕。

Undertow容器

要將嵌入的servlet容器更改為undrow,您需要編輯pom文件以刪除tomcat依賴項并添加undrow野来。

<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>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

配置Undertow恼除,application.xml配置如下:

server.undertow.accesslog.dir= # Undertow access log directory.
server.undertow.accesslog.enabled=false # Enable access log.
server.undertow.accesslog.pattern=common # Format pattern for access logs.
server.undertow.accesslog.prefix=access_log. # Log file name prefix.
server.undertow.accesslog.rotate=true # Enable access log rotation.
server.undertow.accesslog.suffix=log # Log file name suffix.
server.undertow.buffer-size= # Size of each buffer in bytes.
server.undertow.buffers-per-region= # Number of buffer per region.
server.undertow.direct-buffers= # Allocate buffers outside the Java heap.
server.undertow.io-threads= # Number of I/O threads to create for the worker.
server.undertow.max-http-post-size=0 # Maximum size in bytes of the HTTP post content.
server.undertow.worker-threads= # Number of worker threads.

Jetty容器

配置情況,移處默認tomcat內(nèi)嵌容器

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
 <!-- 移處TOMCAT -->
   <exclusions>
      <exclusion>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-tomcat</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

嵌入式Web容器層面的約定和定制

嵌入式Web容器對外提供HTTP服務(wù)曼氛,默認端口8080對外監(jiān)聽和提供服務(wù)豁辉。想改變默認的配置端口,可以在application.properties中指定舀患。

server.port = 9000(the port number you want)
server.address
server.ssl.*
server.tomcat.*

如果上訴仍然沒有辦法滿足要求徽级,springBoot支持對嵌入式的Web容器實例進行定制,可以通過向IoC容器中注冊一個EmbeddedServletContainerCustomizer類型的組件來對嵌入式的Web容器進行定制聊浅。

public class UnveilSpringEmbeddedTomcatCustomizer implements EmbeddedServletContainer{
        public void customize(ConfigurableEmbeddedServletContainer container){
            container.setPort(9999);
            container.setContextPath("C\\hello");
                           ...
        }
    }

區(qū)別

  • 內(nèi)嵌Tomcat餐抢、Jetty無法執(zhí)行jar形式的jsp现使;Undertow不支持JSP
  • 壓測結(jié)果:3個容器在相同的用例及并發(fā)請求下,Undertow稍微比Tomcat和Jetty好一點旷痕。
  • 資源消耗:JETY啟動時內(nèi)存占用最大碳锈,使用311 MB。Tomcat和Undertow的初始腳印相似欺抗,在120 MB左右售碳,Undertow出現(xiàn)在114 MB的最低水平。響應(yīng)頭中的關(guān)鍵差異在于默認情況下包括HTTP持久連接绞呈。該頭將在支持持久連接的客戶端中使用贸人,以通過重用連接細節(jié)來優(yōu)化性能。Undertow在性能和內(nèi)存使用方面是最好的佃声。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艺智,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子圾亏,更是在濱河造成了極大的恐慌力惯,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件召嘶,死亡現(xiàn)場離奇詭異,居然都是意外死亡哮缺,警方通過查閱死者的電腦和手機弄跌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尝苇,“玉大人铛只,你說我怎么就攤上這事】妨铮” “怎么了淳玩?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長非竿。 經(jīng)常有香客問我蜕着,道長,這世上最難降的妖魔是什么红柱? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任承匣,我火速辦了婚禮,結(jié)果婚禮上锤悄,老公的妹妹穿的比我還像新娘韧骗。我一直安慰自己,他們只是感情好零聚,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布袍暴。 她就那樣靜靜地躺著些侍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪政模。 梳的紋絲不亂的頭發(fā)上岗宣,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機與錄音览徒,去河邊找鬼狈定。 笑死,一個胖子當(dāng)著我的面吹牛习蓬,可吹牛的內(nèi)容都是我干的纽什。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼躲叼,長吁一口氣:“原來是場噩夢啊……” “哼芦缰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起枫慷,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤让蕾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后或听,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體探孝,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年誉裆,在試婚紗的時候發(fā)現(xiàn)自己被綠了顿颅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡足丢,死狀恐怖粱腻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情斩跌,我是刑警寧澤绍些,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站耀鸦,受9級特大地震影響柬批,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜袖订,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一萝快、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧著角,春花似錦揪漩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冰更。三九已至,卻和暖如春昂勒,著一層夾襖步出監(jiān)牢的瞬間蜀细,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工戈盈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奠衔,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓塘娶,卻偏偏與公主長得像归斤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子刁岸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容