一台机器可以跑多个tomcat实例。无论是tomcat7、tomcat8一起跑,还是多个tomcat8一起跑,都可以。
为什么会有这种需求?有些是因为不同的应用,需要对应不同的WEB容器,如以前做的程序,用JDK1.7,跑在tomcat7下;现在一般都JDK1.8,跑在tomcat8或以上。多个tomcat8的话,是不想应用之间互相影响,多个应用都挤在一个tomcat下,一损俱损。
一、同时跑多个tomcat实例
很简单,tomcat是免安装的,需要什么版本的tomcat,需要多少个tomcat,就复制粘贴多少个tomcat程序文件夹,然后再将<tomcat>/conf/server.xml
里的端口改改,避免冲突就可以了。
修改3个端口:
<Server port="8005" shutdown="SHUTDOWN">
...
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
...
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
即修改 8005、8080、8009这3个端口。比如,我放了2个tomcat8,那么第一个不改,就用默认的这3个;然后第二个tomcat的端口,统统改成9开头:
<Server port="9005" shutdown="SHUTDOWN">
...
<Connector port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
...
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />
改了以后,就用 localhost:9080
进行访问。以此类推。
网上有文章发现了真理,说tomcat实际上分为CATALINA_BASE和CATALINA_HOME两部分,只需保留一个BASE,然后多多复制粘贴HOME。我想说的是,这样究竟节省了啥?除了节省硬盘空间外,应用之间互不影响这个初衷是否得到照顾?另外,如果真有这种机制,tomcat应该早就支持了吧,何必要我们另辟蹊径,大费周折搞这么多。所以我就没有深入下去看这些教程:
南山居:Tomcat多实例部署
二、创建windows服务
本来直接运行<tomcat>/bin/startup.bat
就好,但有两个不好处:要手动运行;不小心会被关掉。创建windows服务最实际。
怎么建?运行<tomcat>/bin/service.bat
可有两种方式:
1、不指定名称,系统创建默认的服务名称
service.bat install
这样创建出来后,tomcat8的服务名称就类似:Apache Tomcat 8.5 Tomcat8
这样。可用在单个或第一个tomcat8实例。
2、指定服务名称
service.bat install name tomcat8-2
这样就可以创建第2个tomcat8实例的实例。否则会因为名称重复而失败。
注意不要在操作系统定义环境变量:CATALINA_HOME、CATALINA_BASE。这两个变量没什么用,根本没必要创建,而且会妨碍创建多个tomcat服务。