必须使用解压版Tomcat并为第二个实例新建CATALINA_HOME2/CATALINA_BASE2环境变量,修改其startup.bat和catalina.bat中变量引用,并调整server.xml中shutdown、HTTP、AJP三端口,方可实现8.5与10版本独立启动。

一台电脑同时装了Tomcat 8.5 和 Tomcat 10,启动时总默认跑起 Tomcat 10,即使你双击的是 8.5 的 startup.bat,控制台也显示 10.x 版本号,根本无法按需切换——这不是端口没改的问题,是环境变量被覆盖导致的启动逻辑错乱。
确认是否用了压缩包版而非安装版
必须使用 apache-tomcat-x.x.xx.zip 这类解压即用版本。安装版(.exe)会注册服务、写注册表、强制绑定 CATALINA_HOME 到系统级路径,后续手动配置新变量完全无效。
检查你两个 Tomcat 文件夹里是否存在 service.bat、tomcatxw.exe 或 registry 相关文件,有则卸载重下压缩包。
为第二个 Tomcat 单独建环境变量对
打开「系统属性 → 高级 → 环境变量」,在「系统变量」区域新建两行:
变量名:CATALINA_HOME2,变量值:D:\apache-tomcat-8.5.93(第二个 Tomcat 的根目录,不是 conf 或 bin 子目录)
变量名:CATALINA_BASE2,变量值:同上,也填 D:\apache-tomcat-8.5.93
注意:第一个 Tomcat 仍用原始 CATALINA_HOME/CATALINA_BASE,不要动它;新增变量名末尾的数字“2”不能省略,也不能写成 CATALINA_HOME_2 或 catalina_home2——大小写和下划线都会导致 bat 脚本读取失败。
修改第二个 Tomcat 的启动脚本
进入第二个 Tomcat 的 bin 目录,用记事本或 VS Code 打开 startup.bat 和 catalina.bat。
方法一:全文替换(推荐)
在 startup.bat 中,把所有 CATALINA_HOME 替换为 CATALINA_HOME2;
在 catalina.bat 中,把所有 CATALINA_HOME 替换为 CATALINA_HOME2,再把所有 CATALINA_BASE 替换为 CATALINA_BASE2。
方法二:精准定位修改(防误伤)
startup.bat 只需改第 27 行左右的 if not "%CATALINA_HOME%" == "" goto gotHome 为 if not "%CATALINA_HOME2%" == "" goto gotHome,并向下找到 set CATALINA_HOME=%~dp0.. 这行,删掉或注释掉(加 rem 开头);
catalina.bat 则重点改第 112 行附近的 set CATALINA_HOME= 和第 126 行附近的 set CATALINA_BASE=,分别赋值为 %CATALINA_HOME2% 和 %CATALINA_BASE2%。
改完保存,关闭所有命令行窗口,避免旧变量缓存干扰。
调整 server.xml 中三处关键端口
打开第二个 Tomcat 的 conf/server.xml,用文本编辑器搜索以下三段 XML 标签,逐一修改 port 属性值(不能与第一个 Tomcat 及其他服务冲突):
第一步:
第二步:
第三步:
改完保存,这三处端口只要不重复即可,无需刻意避开 80xx 段,比如设成 9081、9006、9010 同样有效;但若设成 80、443、22 等特权端口,Windows 下需管理员权限运行 startup.bat 才能绑定成功。
验证启动是否真正隔离
打开两个独立的 CMD 窗口,分别执行:
窗口一:set CATALINA_HOME=D:\apache-tomcat-10.1.32 & D:\apache-tomcat-10.1.32\bin\startup.bat
窗口二:set CATALINA_HOME2=D:\apache-tomcat-8.5.93 & set CATALINA_BASE2=D:\apache-tomcat-8.5.93 & D:\apache-tomcat-8.5.93\bin\startup.bat
观察两个窗口输出日志首行的 Server info 字段:一个应显示 Apache Tomcat/10.1.x,另一个显示 Apache Tomcat/8.5.x;浏览器分别访问 http://localhost:8080 和 http://localhost:8081,页面标题也应对应不同版本的欢迎页。

















