tomcat 的自问自答与总结
在查看了官方文档和做了多次试验,我觉得应该给自己提几个问题,看看我是不是真正的理解,我是不是对之前疑惑的东西有了答案。
1 tomcat 的加载问题,启动后更新是否自动加载
- server.xml 文件更改必须重启才能生效
- 在Host 定义的appBase 目录中的war包会自动加载
- 在Host 定义的appBase 目录中的war包如果发生更改会自动重新加载
- 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 配置的位置。
- server.xml 里面的 Host 配置下的Context.
- conf///.xml
- 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元素定义的路径,这样就会引起二次部署。
解决办法:
- 我们可以通过Host 的属性deployIgnore 来精确匹配。避免二次部署。
- 通过避免Host定义的路径包含Context 的路径,如果我们将项目已经存放在Host 定于的路径,那么我们可以无需再定义一次Context .
如果文章有写的不足的地方,或者是写得错误的地方,请你一定要指出,因为这样不光是对我写文章的一种促进,也是一份对后面看此文章的人的责任。
tomcat 的自问自答与总结的更多相关文章
- [python]自问自答:python -m参数?
python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- 自问自答之VR遐想
先让我组织一下语言,作为表达能力超弱的战五渣来讲,归纳总结什么的最要命了. 我可以给你分析个1到N条出来,但是一般来讲没什么顺序,想到什么就说什么.而且我属于线性思维,有一个引子就可以按着话头一步步发 ...
- [python]自问自答:python -m参数? (转)
python -m xxx.py 作用是:把xxx.py文件当做模块启动但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...
- [python]自问自答:python -m参数? (转) ( python2.7 版本 )
原文地址: http://www.cnblogs.com/xueweihan/p/5118222.html python -m xxx.py 作用是:把xxx.py文件当做模块启动 但是我一直不明白当 ...
- css自问自答(二)
css自问自答(二) 7.掌握定位的一些属性 position 和 display 属性,以及如何浮动(float)和清除(clear)元素,z-index属性 三个属性控制: position 属性 ...
- css自问自答(一)
css自问自答(一) 1.块级元素和行内元素特性与区别? 块级:display:block <div>.<p>.<h1>...<h6>.<ol&g ...
- vue 源码自问自答-响应式原理
vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...
- 区块链自问自答 day1
区块链自问自答 day1 简要介绍区块链是什么? 区块链(Blockchain)是一种对等网络下的分布式数据库系统 数据结构中的单向链表是通过每个节点包含一个节点的指针实现"链" ...
- 区块链自问自答 day2
区块链自问自答 day2 区块链的自治性是如何达成的?为什么能够在去信任的环境下自由安全地交换数据? 区块链中有众多的节点,包含了恶意节点.故障节点.正常节点,想要这些节点共同做出一致的决定就需要 ...
随机推荐
- Ng第十九课:总结(Conclusion)
19.1 总结和致谢 欢迎来到<机器学习>课的最后一段视频.我们已经一起学习很长一段时间了.在最后视频中,我想快速地回顾一下这门课的主要内容,然后简单说几句想说的话. 作为这门课的结束时 ...
- linux 修改ip 地址
1./etc/sysconfig/network-scripts/ifcfg-网卡 如果是新网卡 自己写配置文档 ip a 即可查看网卡名字 (这是eno16777736) BOOTPROTO= dh ...
- openresty + lua 2、openresty 连接 redis,实现 crud
redis 的话,openresty 已经集成,ng 的话,自己引入即可. github 地址:https://github.com/openresty/lua-resty-redis github ...
- hdu 3910 Liang Guo Sha
题目链接:hdu 3910 Liang Guo Sha 题目大意:Alice和Bob这两个小伙伴又发明了一种新游戏, 叫两国杀, 每个人手上有两张牌,“杀” 和“闪”, 然后有三个数值A,B和C, 当 ...
- 关于国密算法 SM1,SM2,SM3,SM4 的笔记
国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4.密钥长度和分组长度均为128位. SM1 为对称加密.其加密强度与AES相当.该算法不公开,调用该算法时,需要通过加密芯片的接 ...
- delphi 窗体自适应屏幕分辨率
delphi 窗体自适应屏幕分辨率 这是个困惑我很长时间的问题,到今天终于得到解决了. 话说Delphi有个很强的窗体设计器,这一点让VC粉丝垂涎三尺而不可得.但是,Delphi里设计的窗体并没有自动 ...
- 分形之二叉树(Binary Tree)
上一篇文章讲的是分形之树(Tree),这一篇中将其简化一下,来展示二叉分形树的生长过程. 核心代码: static void FractalBinaryTree(const Vector3& ...
- <string.h>的学习
感觉学习代码库最好的方法就是运行一下. 下面附上结果和示例代码 #include <stdio.h> #include <string.h> int main(){ const ...
- 不合法的DB Index
redis报错,Invalid Db Index . 需要清理一下redis, 进入redis文件加下,登录redis, redis-cli ,输入账号密码, flush all, 回收程序池,重新生 ...
- AngularJs从数据库获取数据并显示
哈哈,昨天下午和今天早上,花上一些时间,学习AngularJs,仅是粗略预览一下.很好,非常好. 由于手上有开发ASP.NET MVC环境,就在这测试下,去数据库获取数据并显示数据. 数据库表创建,添 ...