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

相关文章
相关标签/搜索