tomcat 的自問自答與總結

在查看了官方文檔和作了屢次試驗,我以爲應該給本身提幾個問題,看看我是否是真正的理解,我是否是對以前疑惑的東西有了答案。tomcat

1 tomcat 的加載問題,啓動後更新是否自動加載

  1. server.xml 文件更改必須重啓才能生效
  2. 在Host 定義的appBase 目錄中的war包會自動加載
  3. 在Host 定義的appBase 目錄中的war包若是發生更改會自動從新加載
  4. tomcat 在解壓war包後,會自動向解壓war包的目錄添加META-INF/war-tracker 文件,用於記錄在tomcat未運行的時候war包(不是解壓後的文件)是否發生改變.若是改變,tomcat在啓動會從新發布。這裏引伸一點,若是是解壓後的文件目錄發生改變了,是否會從新加載? 這裏取決於reloadable,該參數會監測/WEB-INF/classes/和/WEB-INF/lib的文件是否發生改變,可是開啓該參數會致使性能下降。
狀態 文件狀態 說明
tomcat運行中 war包更新 自動從新加載
tomcat運行中 war包不更新,文件內容更新 若是是靜態文件更改,訪問能夠當即獲取最新的信息,若是是一些lib文件或者是class文件更新的話,須要關注參數reloadable,該參數會監測/WEB-INF/classes/和/WEB-INF/lib的文件是否發生改變,可是開啓該參數會致使性能下降。
tomcat關閉中 war包更新 war-tracker記錄war包是否更新,更新了的話啓動時從新部署
tomcat關閉中 war包不更新,文件內容更新 啓動會自動加載最新的文件內容。

2 tomcat 的context.xml 文件讀取順序與覆蓋原則

tomcat 有三個能夠讀取Context 配置的位置。app

  1. server.xml 裏面的 Host 配置下的Context.
  2. conf/ / / .xml
  3. webapps/ /META-INF/context.xml

讀取順序 2 --->1--->3 後面的配置覆蓋前面的配置webapp

3 就是 建議的tomcat 配置

示例配置,這個配置須要根據本身的業務狀況來進行配置。不少屬性默認已經設置好了性能

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
               acceptCount="300" 
               acceptorThreadCount="2"
               compression="on" 
               keepAliveTimeout="25000" 
               maxConnections="5000" 
               maxThreads="400" 
               minSpareThreads="25"
               />

4 避免二次部署加載的問題

定義 Context 元素的docBase的屬性的值(路徑)不要是Host 元素的 appBase 的路徑的子目錄,也就是若是Host 定義的路徑包含 Context元素定義的路徑,這樣就會引發二次部署。code

解決辦法:server

  1. 咱們能夠經過Host 的屬性deployIgnore 來精確匹配。避免二次部署。
  2. 經過避免Host定義的路徑包含Context 的路徑,若是咱們將項目已經存放在Host 定於的路徑,那麼咱們能夠無需再定義一次Context .

若是文章有寫的不足的地方,或者是寫得錯誤的地方,請你必定要指出,由於這樣不光是對我寫文章的一種促進,也是一份對後面看此文章的人的責任。xml

相關文章
相關標籤/搜索