在查看了官方文档和做了多次试验,我觉得应该给自己提几个问题,看看我是不是真正的理解,我是不是对之前疑惑的东西有了答案。

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 配置的位置。

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

读取顺序 2 --->1--->3 后面的配置覆盖前面的配置

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元素定义的路径,这样就会引起二次部署。

解决办法:

  1. 我们可以通过Host 的属性deployIgnore 来精确匹配。避免二次部署。
  2. 通过避免Host定义的路径包含Context 的路径,如果我们将项目已经存放在Host 定于的路径,那么我们可以无需再定义一次Context .

如果文章有写的不足的地方,或者是写得错误的地方,请你一定要指出,因为这样不光是对我写文章的一种促进,也是一份对后面看此文章的人的责任。

tomcat 的自问自答与总结的更多相关文章

  1. [python]自问自答:python -m参数?

    python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...

  2. 自问自答之VR遐想

    先让我组织一下语言,作为表达能力超弱的战五渣来讲,归纳总结什么的最要命了. 我可以给你分析个1到N条出来,但是一般来讲没什么顺序,想到什么就说什么.而且我属于线性思维,有一个引子就可以按着话头一步步发 ...

  3. [python]自问自答:python -m参数? (转)

    python -m xxx.py 作用是:把xxx.py文件当做模块启动但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...

  4. [python]自问自答:python -m参数? (转) ( python2.7 版本 )

    原文地址: http://www.cnblogs.com/xueweihan/p/5118222.html python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当 ...

  5. css自问自答(二)

    css自问自答(二) 7.掌握定位的一些属性 position 和 display 属性,以及如何浮动(float)和清除(clear)元素,z-index属性 三个属性控制: position 属性 ...

  6. css自问自答(一)

    css自问自答(一) 1.块级元素和行内元素特性与区别? 块级:display:block <div>.<p>.<h1>...<h6>.<ol&g ...

  7. vue 源码自问自答-响应式原理

    vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...

  8. 区块链自问自答 day1

    区块链自问自答 day1 简要介绍区块链是什么? 区块链(Blockchain)是一种对等网络下的分布式数据库系统 ​ 数据结构中的单向链表是通过每个节点包含一个节点的指针实现"链" ...

  9. 区块链自问自答 day2

    区块链自问自答 day2 区块链的自治性是如何达成的?为什么能够在去信任的环境下自由安全地交换数据? ​ 区块链中有众多的节点,包含了恶意节点.故障节点.正常节点,想要这些节点共同做出一致的决定就需要 ...

随机推荐

  1. AIX 批量更改密码

    使用 chpasswd 可以使用 chpasswd 方便地更改单个或多个账户密码.这意味着不需要像平时一样在命令行上重复输入密码.尽管可以以交互方式使用 chpasswd,但是我建议以非交互方式使用它 ...

  2. 1109 Group Photo

    Formation is very important when taking a group photo. Given the rules of forming K rows with N peop ...

  3. poj2478 Farey Sequence 欧拉函数的应用

    仔细看看题目,按照题目要求 其实就是 求 小于等于n的 每一个数的 欧拉函数值  的总和,为什么呢,因为要构成 a/b 然后不能约分  所以 gcd(a,b)==1,所以  分母 b的 欧拉函数值   ...

  4. [javascript]Three parts of javascript code snippet

    <script> (function(){ /* if (navigator.userAgent.toLowerCase().indexOf("iphone") == ...

  5. 1.虚拟机中安装ubuntu

    1.VMware安装很简单,全部默认安装即可. 2.安装完VMware之后,打开VMware,点击创建虚拟机 典型安装易出问题,所以这里选择自定义安装 安装过程选项配置如下 处理器数,核数,内存都可以 ...

  6. Android-okhttp下载网络图片并设置壁纸

    在AndroidManifest.xml配置网络访问权限: <!-- 访问网络是危险的行为 所以需要权限 --> <uses-permission android:name=&quo ...

  7. ipad协议

    getLoginQRCode (获取登录二维码)CheckLoginQRCode(检测扫码状态)ManualAuth(扫码登录)ManualAuth(62数据登录)ManualAuth(账号密码登录) ...

  8. C# Winform模仿百度日历

    想写博客不知道从何处开始,就从回忆开始吧. 第一个就从自定义日历控件开始 产生背景: 大概2015年时候有个项目要用到日历,用默认日历展示给用户看,用户毫不客气都说界面太丑,最好做成像百度日历那样方便 ...

  9. (C#)找的winform窗体自适应类

    原文:https://www.cnblogs.com/gguozhenqian/p/4288451.html 需要添加引用System.Windows.Forms public class AutoS ...

  10. DevExpress中获取GridControl排序之后的List

    public System.Collections.IList GetGridViewFilteredAndSortedData(DevExpress.XtraGrid.Views.Grid.Grid ...