1、综述
随着计算机硬件水平的不断提高,往往不是一台机器上只部署一个web项目了,而是尽可能多部署几个项目,以用来节省资源,现在我们看看如何一台机器部署多个项目,我们先结合上一篇文章中提到的tomcat架构(https://blog.csdn.net/luohaitao/article/details/135992940)
从图上我们可以看到,如果我们基于一个tomcat要实现多个项目部署有三种方式:
A、配置多个Context,这也是最简单的方式,一个host可以有多个Context。
B、配置多个host主机,也就是多个webapps,这样也是可以部署多个项目的。
C、配置多个service,或者配置多个engine,因为一个service有且只能有一个engine,所以我们也可以说就是配置多个service。
那么我们下面一一举例来说一下。
2、配置多个Context
项目都放在默认的webapps目录下,这种方式的站点通过统一端口(Connector:port)号访问。
2.1直接复制到webapps目录下
将你要部署的项目直接复制到webapps目录下,例如我这边在默认的webapps目录下增加我自己的项目(Context),里面就放两个文件。
浏览器输入不同上下文和主页,可显示如下:
如果想修改端口号,可以统一修改掉,访问两个app采用同一个端口。
注意:一个tomcat下同时部署多个项目
项目都放在webapps内(共用一个端口)
1)把两个项目都放在webapps下。
2)处理重复jar包。
两个项目如果有重复的jar包,一定要进行处理,否则会导致服务器内存耗尽,报类似于http-bio-8080"-exec-1等异常。
解决方案:建立共享包路径。
参考文章:https://my.oschina.net/angerbaby/blog/271438
2.2修改server.xml文件
除了直接复制项目到webapps目录下外,还可以采用映射的方式,修改server.xml文件,将路径添加到context节点上,此时这个项目目录就不一定非要放到webapps目录下了。
现在我把两个文件夹放到E盘上去,然后我们修改server.xml文件,这个时候我们再刷新刚才的页面就打不开了(因为已经移走两个app)。
我们重启tomcat,再测试就又能打开了。
以上新增内容说明:
docBase属性: 指定Web应用的文件路径,可以是绝对路径,也可以给定相对路径
path属性: 指定访问该Web应用的URL入口。
reloadable属性: 若这个属性为true,tomcat服务器在运行状态下会监视WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到class文件被更新,服务器会自动重新加载Web应用。
如果我们想给不同项目访问用不同的端口如何做呢?
3、配置多个host
配置多个host相当于配置多个webapps,现在网上大部分的做法是一个webapps,然后在server.xml配置多个host,不同host去对应webapps下面的context,但与我们我们这儿要说的有点不同,我们是要1个webapps对应不同的host。
3.1、多个webapps和多个host
只要在tomcat的目录下新建一个名为webapps2的文件夹,里面放上一个项目myapp2,如下图所示:
然后我们修改一下server.xml文件,里面的context可以不改,还用上面。
因为采用了不同的host主机名,但还是在一个tomcat下,那么我们修改一下hosts文件,
重启一下服务,访问一下两个host的页面,如下:
和
3.2、一个webapps和多个host
如果是一个webapps和多个host,docBase就不能是webapps这个目录了,这个时候其实是docbase已经跟webapps没有关系了,是另外一个目录,如下所示:
虽然不是webapps这个目录了,但appbase还是一个地方,还是统一管理。
这个时候浏览器还是输入地址前面的不同host的地址,照样显示:
4、配置多个service
我们继续解读server.xml继续将标签上移一层到service,从tomcat架构图中可以看到,是可以配置多个service的,这个目的是为了解决多个应用同名的问题(这是一种方法,另外就是部署多个tomcat)。
将Service元素复制一份,直接粘贴到原来那个Service元素之后,即 .....这一部分复制下来,放到第一个 之后,然后再继续修改刚刚添加的部分配置信息,按照下面的步骤进行操作:
A、将复制的service的名称改为Catalina2。
B、将第复制的Connector元素的port属性由8989(默认是8080)改为其他未使用的端口,如8988
C、修改engine的名称与service一样为Catalina2。
D、host的appBase修改为webapps2。
E、接下来需要创建目录webapps2,与webapps同一个文件夹下。
F、并在tomcat的conf目录下创建Catalina2目录。
G、复制webapps/ROOT到webapps2中。
启动tomcat,就可以访问两个同名应用了。
当然你可以配置了多个 Service 元素。就需要修改Tomcat的内存参数,防止内存溢出。如果你是linux系统,修改 %TOMCAT_HOME%/bin/catalina.bat
-Xms //初始堆大小
-Xmx //最大堆大小
-XX:PermSize //初始永久区大小
-XX:MaxPermSize //最大永久区大小
放到有效配置的第一行
set JAVA_OPTS=-server -Xincgc -Xms1024m -Xmx1024m -XX:MaxPermSize=256m
如果你是windows系统,去修改注册表吧,
HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\tomcat6.0\Parameters\Java
右边的 Options 里面一条配置占一行 前后不能有空格。
然后重启。
5、配置多个Tomcat
同一台物理机上可以配置多个tomcat,这个资料已经很多了,在这先不介绍了。
参考资料:
https://www.cnblogs.com/jianxia612/articles/7571658.html
https://blog.csdn.net/vickyfei/article/details/7895853