背景
现在有好几个 war 包需要部署到 Tomcat 上,而且都要求直接放在 ROOT 目录下,即不能产生多余的上下文。
1 环境准备
可以参考我的这篇博文的第3章。安装好 Tomcat 并明白如何部署 war 包。
2 实现多开
2.1 基本原理
CATALINA 是 Tomcat 的 servlet 容器,我们可以指定不同的 CATALINA_HOME 来同时启动多个 Tomcat 。
2.2 实现
在合适的地方创建一个文件夹用来存放后续创建的多开 Tomcat 的文件夹,这里我就放在 Tomcat 的根目录下,命名为 /moreCats 。
在 /moreCats 下创建 /cat1 和 /cat2 2个目录,复制原 Tomcat 根目录下的这几个文件夹到 /cat1 和 /cat2 中。
/conf
/logs
/temp
/webapps
/work
以下以 /cat1 举例, /cat2 同理。
在 /cat1 目录下创建 start.bat 启动脚本。
@echo off
REM 启动第1个Tomcat实例
REM 将这里设置为你自己的真实目录
set "CATALINA_BASE=D:\coding_work\apache-tomcat-9.0.64\moreCats\cat1"
call "%CATALINA_HOME%\bin\startup.bat"
修改 /cat1/conf/server.xml 中的端口配置,多个 Tomcat 示例端口不能重复。
<!--需要修改HTTP、AJP和Shutdown-->
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
把上面的3个端口设置不重复就行了。
然后使用启动脚本启动即可。
最后展示下改造后的目录结构。
apache-tomcat-9.0.64/
├── bin/
├── conf/
├── lib/
├── logs/
├── temp/
├── webapps/
├── work/
├── moreCats/
│ ├── cat1/
│ │ ├── conf/
│ │ │ └── server.xml
│ │ ├── lib/
│ │ ├── logs/
│ │ ├── webapps/
│ │ ├── work/
│ │ └── start.bat
│ ├── cat2/
│ │ ├── conf/
│ │ │ └── server.xml
│ │ ├── lib/
│ │ ├── logs/
│ │ ├── webapps/
│ │ ├── work/
│ │ └── start.bat
注意事项:
- 环境变量:确保批处理脚本中每次启动不同实例时使用的是正确的 CATALINA_BASE 。
- 端口号冲突:不同的实例需要在 server.xml 中设置不同的 HTTP 、AJP 和 Shutdown 端口,避免冲突。
- 日志管理:每个实例的日志将存储在各自的 logs 目录下,便于管理和分析。