你知道怎么在生产环境下部署tomcat吗?

享学课堂特邀作者:老顾
转载请声明出处!

一、前言

小伙伴们在网上看到的很多文章,都是对tomcat的一些介绍,什么配置啊,怎么启动。其实在生产环境中怎么部署,和网上介绍的有很大区别。这篇文章老顾就带着大家分享一些如何在生产环境下部署。

二、tomcat组件

我们先回顾一下tomcat有哪些组件

我们小伙伴要抓住几个点

  1. 对外接收请求是Connector连接器组件,可以支持不同协议,Connector组件中可设置端口,所以我们请求的时候需要输入端口号。可以把Connector当作接待员。

  2. Connector组件接收到请求后,转发给处理**Engine(catalina引擎)**组件去处理。

  3. 根据请求的域名,分配到对应的Host主机。

  4. 在根据path分配context组件

区分项目有2个核心组件,一个是host,一个是context。根据域名和path分配不同的项目。其实还少了一个就是启动参数的配置,也就是一同的项目启动参数也可以不一样,如端口号啊。

三、部署目录

我们先看一下Tomcat目录结构:

--bin //存放着tomcat启动和关闭脚本--conf //存放着tomcat服务器的各种配置文件--lib //tomcat服务器和所有web应用所属的jar文件--logs //存放着Tomcat的日志文件--temp //存放着Tomcat的运行时产生的临时文件--webapps //把web应用放到此目录即可--work //Tomcat将jsp生成的servlet源文件和字节码文件放到此目录

我们要部署一个web应用,只要把应用的war包放到webapps就可以了。网上一般也是这么讲的。小伙伴们觉得有什么问题吗

我们看一下,如果我们要部署两个web应用Web-A和Web-B,把他放到webapps中。我们到bin目录下运行startup.sh启动,这样web-A和web-B就可以访问了。

如果现在业务上需要把web-B先暂停,那我们改怎么办?还有就是tomcat启动是会有启动参数设置,如最大线程数,最小线程数等配置。那web-A和web-B怎么配置不一样的启动参数呢?

其实还有一个问题,如果我们要把**tomcat版本升级,怎么办?**把tomcat直接覆盖?那些web应用重新部署?

小伙伴们,应该怎么办呢?

四、目录规划

tomcat软链接

我们先把tomcat应用放到/usr/local目录下

# cd /usr/local# lldrwxr-xr-x.  9 root root  220 5月   8 19:23 apache-tomcat-8.5.40

上面我们是应用了tomcat8.5版本,如果我们需要升级到9.x版本的话,如果我们需要升级到9.x版本的话,那关于tomcat目录的路径就需要重新修改,这就太不方便了,所以我们可以用软链接的方式解决这个问题

# ln -s apache-tomcat-8.5.40 tomcat# lldrwxr-xr-x.  9 root root  220 5月   8 19:23 apache-tomcat-8.5.40lrwxrwxrwx.  1 root root   20 5月   8 16:42 tomcat -> apache-tomcat-8.5.40

这样以后用tomcat应用路径,就直接使用tomcat这个软链接,即使将来tomcat升级只要修改一些软链接就行了,其他就不需要改。

目录分离

我们应该要把tomcat和web应用目录分离出来,即使tomcat升级也跟web应用没有关系。那分离出来,怎么启动呢?

我们要利用启动参数中的CATALINA_HOME和CATALINA_BASE,来指定tomcat程序应用和web应用;通过CATALINA_BASE就可以实现web应用分离出去,我们来看一些tomcat一共有哪些启动参数

启动参数描述说明
JAVA_OPTjvm启动参数,设置内存 编码等-Xms100m -Xmx200m -Dfile.encoding=UTF-8
JAVA_HOME指定jdk目录
CATALINA_HOMEtomcat程序根目录
CATALINA_BASE应用部署目录,默认为 $CATALINA_HOME
CATALINA_OUT应用日志输出目录,默认为$CATALINA_BASE/logs
CATALINA_TMPDIR应用临时目录,默认为$CATALINA_BASE/temp

我们先在/usr/local目录下新建一个web-apps目录,此目录就放web应用

# mkdir web-apps
# ll
lrwxrwxrwx.  1 root root   20 5月   8 16:42 tomcat -> apache-tomcat-8.5.40
drwxr-xr-x.  2 root root    6 5月   8 20:29 web-apps

在web-apps目录下,新建web-a和web-b目录,这两个目录就是web-A和web-b的web应用目录。

# cd web-apps/
# mkdir web-a
# mkdir web-b
# ll
drwxr-xr-x. 2 root root 6 5月   8 20:33 web-a
drwxr-xr-x. 2 root root 6 5月   8 20:33 web-b

把tomcat程序中的conf目录拷贝到web-a和web-b里面,这样各个web应用都有各自的配置文件。

# cp -r /usr/local/tomcat/conf /usr/local/web-apps/web-a/ 
# cp -r /usr/local/tomcat/conf /usr/local/web-apps/web-b/ 

再在web-a和web-b目录下,新建webapps和logs目录,webapps存放web应用,logs存放日志文件。

到此目录分离开了,但还缺少一个启动脚本

五、启动脚本

此启动脚本,老顾引用了网上的一个脚本改造了一下,命名为tomcat.sh

#!/bin/bash
export JAVA_OPTS="-Xms100m -Xmx200m"
export JAVA_HOME="/usr/java/jdk1.8.0_181"
export CATALINA_HOME="/usr/local/tomcat"
export CATALINA_BASE="`pwd`"case $1 instart)$CATALINA_HOME/bin/catalina.sh startecho start success!!;;stop)$CATALINA_HOME/bin/catalina.sh stopecho stop success!!;;restart)$CATALINA_HOME/bin/catalina.sh stopecho stop success!!sleep 2$CATALINA_HOME/bin/catalina.sh startecho start success!!;;version)$CATALINA_HOME/bin/catalina.sh version;;configtest)$CATALINA_HOME/bin/catalina.sh configtest;;
esac
exit 0

脚本比较简单,核心就是启动参数,只要注意CATALINA_BASE="pwd"的意思是,执行脚本的路径,也就是代表web应用路径是脚本执行的路径;再把tomcat.sh设置一些启动权限 # chmod +x tomcat.sh 。

修改conf下的server.xml

<Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Context path="/" docBase="" reloadable="true" /><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

修改了红色字体部分,host中的appBase是相对CATALINA_BASE的路径,就是web应用的路径,context中的path是请求url,docBase也是相对路径,相对于appBase的,当然也可以设置绝对路径。在web-a下创建index.html文件

到现在为止的web-a的目录下

# ll
drwx------. 3 root root 254 5月   8 22:05 conf
drwxr-xr-x. 2 root root 197 5月   8 21:27 logs
-rwxr-xr-x. 1 root root 598 5月   8 21:21 tomcat.sh
drwxr-xr-x. 2 root root  24 5月   8 21:25 webapps
# ll webapps/
-rw-r--r--. 1 root root 12 5月   8 21:25 index.html

启动tomcat.sh

# ./tomcat.sh start

访问 http://192.168.31.150:8080/ 就ok了,直接返回了index.html里面的内容。

需要说明的是,在web-a执行tomcat.sh,里面的启动参数**CATALINA_BASE是web应用路径,那tomcat.sh脚本中的$CATALINA_HOME/bin/catalina.sh 这个脚本执行所采用的conf配置文件是web-a目录下的,**跟tomcat程序的conf没有任务关系,也跟web-b目录下的conf也没有任何关系,这样就达到了应用之间的配置分离。

补充一下,**在配置context和host时,很多公司不会在server.xml配置,而是通过conf/Catalina目录下,新建host和context,**这个知识点,网上很多,小伙伴们可自行查看,因为我们已经单应用分离出来了,那样的配置好处不大。

六、总结

上面老顾介绍了tomcat在生产环境的部署要点,其实还缺少一个环节,就是我们war包或jar包是按照什么流程以及方式上传到生产环境的?这个留个悬念,下次老顾会介绍。

总结

上述知识点,囊括了目前互联网企业的主流应用技术以及能让你成为“香饽饽”的高级架构知识,每个笔记里面几乎都带有实战内容。

很多人担心学了容易忘,这里教你一个方法,那就是重复学习。

打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。

资料领取方式:戳这里免费领取

从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。
学会了。

资料领取方式:戳这里免费领取

从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

[外链图片转存中…(img-YV84jmMb-1623614617860)]

人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈HashMap

Java集合类的整体架构 比较重要的集合类图如下&#xff1a; 有序否 允许元素重复否 Collection 否 是 List 是 是 Set AbstractSet 否 否 HashSet TreeSet 是&#xff08;用二叉树排序&#xff09; Map AbstractMap 否 使用 key-value 来映射和存储数据&#xff0c; Key 必须惟…

互联网寒冬!“996”为什么还没实行?我还等着早点下班呢!

“喊了十多个月的‘996’&#xff0c;说要实行‘996’&#xff0c;上班上到现在&#xff0c;影子都没看到&#xff0c;我还能早点下班吗&#xff1f;” 我一个在广州上班的朋友小李&#xff0c;在我去广州出差期间&#xff0c;与他聊天的时候发出了这样的牢骚&#xff0c;我刚…

matlab求解常微分方程组/传染病模型并绘制SIR曲线

看了很多关于传染病模型的matlab程序,大都是绘制出两条曲线(I、S)的,本文最大的不同是绘出SIR三条曲线。 先给出SIR微分方程组 函数文件: run的程序:

互联网寒冬!技术站最全MySQL数据库实战规范

享学课堂特邀作者&#xff1a;老顾 转载请声明出处&#xff01; 前言 我们小伙伴们经常使用到mysql数据库&#xff0c;一般就这么一用&#xff0c;很少会考虑mysql里面的细节问题&#xff0c;如sql语句的规范&#xff0c;或索引有没有起到相应的效果&#xff0c;今天老顾就给大…

SQL求一个表中非重复数据及其出现的次数

mysql中&#xff0c;我们可以用distinct求不重复的数据有多少&#xff0c;也可以用group by。 这里有个例子&#xff0c;如下表sheet1&#xff0c;共有5411条数据 查询语句 共有3446条不重复数据&#xff0c;每条不重复数据出现的次数在第二列显示&#xff1a;

什么是微服务扩展性和高可用-可扩展性、高可用性和性能

欢迎关注专栏&#xff1a;Java架构技术进阶。里面有大量batj面试题集锦&#xff0c;还有各种技术分享&#xff0c;如有好文章也欢迎投稿哦。 Overview 可扩展性、高可用性和性能 术语可扩展性、高可用性、性能和关键任务对于不同的组织或组织内的不同部门来说可能意味着不同的…

SQL实现当前行等于前面两行数据之和

sql实现类似斐波那契数列的功能&#xff0c;即当前数据等于前面两个数据之和&#xff0c;详看本文例子 原表&#xff1a; sql语句&#xff08;此处要熟悉JION ON的用法&#xff09; 结果

【大牛系列教学】靠着这份面试题跟答案

开篇闲扯 打工人&#xff0c;打工魂&#xff0c;我们生而人上人。当“资本主义”逐渐禁锢我们人&#xff08;大&#xff09;上&#xff08;韭&#xff09;人&#xff08;菜&#xff09;肉体的时候&#xff0c;那一刻我才明白那个日不落帝国资本主义收割机瑞民族之光幸瑞幸咖啡…

【工作感悟】成功入职阿里月薪45K

前言 苦苦寻觅找工作之间&#xff0c;殊不知今日之时乃我心之痛&#xff0c;难道是我不配拥有工作嘛。自面试后他所谓的等待都过去一段时日&#xff0c;可惜在下京东上的小金库都要见低啦。每每想到不由心中一紧。正处为难之间&#xff0c;手机忽然来了个短信预约后续面试。 我…

【工作经验分享】不会真有人觉得mybatis很难学吧

什么是自旋锁和互斥锁&#xff1f; 由于CLH锁是一种自旋锁&#xff0c;那么我们先来看看自旋锁是什么&#xff1f; 自旋锁说白了也是一种互斥锁&#xff0c;只不过没有抢到锁的线程会一直自旋等待锁的释放&#xff0c;处于busy-waiting的状态&#xff0c;此时等待锁的线程不会…

【工作经验分享】这些新技术你们都知道吗

前言 近年来&#xff0c;微服务架构(Microservices Architecture)已经成为一种主流的软件开发方法论&#xff0c;所谓微服务( Microservices ),就是一些具有足够小的粒度、能够相互协作且自治的服务体系。 微服务架构基于分布式系统&#xff0c;同时借助了面向服务架构和企业服…

【微信小程序】使用Hystrix的插件机制

前言 在本篇文章开始前&#xff0c;我想想来回答一个问题&#xff1a;我为什么要写这一篇关于面试的文章&#xff1f; 原因有三&#xff1a;第一&#xff0c;我想为每一个为梦想时刻准备着的”有心人“尽一份自己的力量&#xff0c;提供一份高度精华的Java面试清单&#xff1…

【微信小程序】目前最全的《Java面试题及解析》

开头 在找工作的过程中&#xff0c;对于 Redis 技术知识的掌握已经成为必须的技能。美团面试常常就会被问到Redis相关知识&#xff0c;而这次我就差点倒在了美团3面&#xff0c;面试官连问我以下几个Redis的问题&#xff0c;然后就卡壳了… redis了解吗&#xff1f;你说说怎么…

大话数据结构——算法

算法&#xff1a;算法是解决特定问题求解步骤的描述&#xff0c;在计算机中表现为指令的有限序列&#xff0c;并且每条指令表示一个或多个操作。 为什么把数据结构和算法一起说&#xff1f; 想想罗密欧与朱丽叶&#xff0c;梁山伯和祝英台&#xff0c;少了一个你总会觉得奇怪…

java线上培训班学费一般多少,成长路线图

前言 众所皆知的&#xff0c;Linux的核心原型是1991年由托瓦兹(Linus Torvalds)写出来的&#xff0c;但是托瓦兹为何可以写出Linux这个操作系统?为什么它要选择386的计算机来开发?为什么Linux的发展可以这么迅速?又为什么Linux是免费的?以及目前为何有这么多的 Linux版本(…

java线程池使用实战,太牛了!

前言 今天这篇文章中简单介绍一下一个 Java 程序员必知的 Linux 的一些概念以及常见命令。 如果文章有任何需要改善和完善的地方&#xff0c;欢迎在评论区指出&#xff0c;共同进步&#xff01;笔芯&#xff01; 正式开始 Linux 之前&#xff0c;简单花一点点篇幅科普一下操作…

大数据基础技术和应用

大数据概述 数据的表现形式&#xff1a; 线下数据信息化&#xff1a;数据库、文字记录、照片……互联网-移动互联网&#xff1a;网页数据、用户行为记录、数字图像……传感器&#xff1a;设备监控、智能家居、摄像头…… 大数据的4V特征&#xff1a; 大量化&#xff08;Vol…

java线程池参数面试题,附赠复习资料

前言 作为同时具备高性能、高可靠和高可扩展性的典型键值数据库&#xff0c;Redis不仅功能强大&#xff0c;而且稳定&#xff0c;理所当然地成为了大型互联网公司的首选。 众多大厂在招聘的时候&#xff0c;不仅会要求面试者能简单地使用Redis&#xff0c;还要能深入地理解底…

java线程池有几种,讲的太透彻了

前言 该文档在Github上收获40Kstar的Java面试神技&#xff08;这赞数&#xff0c;质量多高就不用我多说了吧&#xff09;非常全面&#xff0c;包涵Java基础、Java集合、JavaWeb、Java异常、OOP、IO与NIO、反射、注解、多线程、JVM、MySQL、MongoDB、Spring全家桶、计算机网络、…

HIVE入门

Hive概述 什么是 Hive&#xff1f; * Hive 是建立在 Hadoop HDFS 上的数据库仓库基础建构 * Hive 可以用来进行数据库提取转化加载&#xff08;ETL&#xff09; * Hive 定义了简单的类似 SQL 查询语言&#xff0c;称为 HQL&#xff0c;它允许熟悉 SQL 的用户查询数据 * Hi…