同时部署两个不同版本的tomcat要如何配置环境变量
tomcat9
和 tomcat11
会完全独立使用各自的 JDK 和路径
可以参考本人博客先把两个tomcat安装好
保姆级tomcat的页面部署(静态)-CSDN博客
注意:
我的两个tomcat除了版本,关闭端口,访问端口还有提示语不一样,其他都不需要修改
tomcat11
关闭端口:8005 访问端口:8080 提示语:Tomcat -1
tomcat9
关闭端口:8006 访问端口:8888 提示语:Tomcat -2
下面是我的tomcat存放的目录
/opt/tomcat11
/opt/module/tomcat9
配置环境变量
1. 清理旧环境变量
(1) 检查并移除全局变量
# 检查是否有残留配置
grep -r "CATALINA_HOME" /etc/ ~/
grep -r "JAVA_HOME" /etc/ ~/
# 如果有,编辑对应文件(如 /etc/profile、~/.bashrc)
注释掉以下行: # export JAVA_HOME=... # export CATALINA_HOME=...
例如我的已修改如下(当然如果完全不配置也是可以的):
只需保留 基础 PATH 配置:
# 只设置 PATH(不推荐设置全局 JAVA_HOME/CATALINA_HOME) export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin# 如果需要默认 JDK(非必须),可选择其中一个版本 # export PATH=/opt/jdk17/bin:$PATH # 或 /opt/module/jdk11/bin
为什么可以完全移除?
-
setenv.sh
已接管环境变量-
每个 Tomcat 的
bin/setenv.sh
已独立配置JAVA_HOME
和CATALINA_HOME
,优先级更高。 -
全局变量反而可能导致冲突(如你的最初问题)。
-
-
JDK 版本通过
setenv.sh
绑定到 Tomcat-
Tomcat9 → 强制使用 JDK11
-
Tomcat11 → 强制使用 JDK17
-
无需依赖全局
JAVA_HOME
。
-
-
保持系统干净
-
避免其他用户或服务误用全局变量。
-
(2) 立即生效
unset JAVA_HOME CATALINA_HOME CATALINA_BASE # 当前终端清理 source /etc/profile # 重新加载配置
2. 为每个 Tomcat 配置独立环境
(1) Tomcat9(使用 JDK11)
① 创建 setenv.sh
vi /opt/module/tomcat9/bin/setenv.sh
内容:
#!/bin/sh # 强制覆盖全局变量 unset CATALINA_HOME CATALINA_BASE JAVA_HOME JRE_HOME# 设置 Tomcat9 专用变量 export CATALINA_HOME=/opt/module/tomcat9 export CATALINA_BASE=/opt/module/tomcat9 export JAVA_HOME=/opt/module/jdk11 export JRE_HOME=/opt/module/jdk11
② 赋予执行权限
chmod +x /opt/module/tomcat9/bin/setenv.sh
(2) Tomcat11(使用 JDK17)
① 创建 setenv.sh
vi /opt/tomcat11/bin/setenv.sh
内容:
bash
#!/bin/sh # 强制覆盖全局变量 unset CATALINA_HOME CATALINA_BASE JAVA_HOME JRE_HOME# 设置 Tomcat11 专用变量 export CATALINA_HOME=/opt/tomcat11 export CATALINA_BASE=/opt/tomcat11 export JAVA_HOME=/opt/jdk17 export JRE_HOME=/opt/jdk17
② 赋予执行权限
chmod +x /opt/tomcat11/bin/setenv.sh
3. 修改 Tomcat 端口(避免冲突)
(1) 编辑 Tomcat9 的关闭和访问端口配置
vi /opt/module/tomcat9/conf/server.xml
修改以下端口(确保不与 Tomcat11 冲突):
xml
<Server port="8005" shutdown="SHUTDOWN"> <!-- 默认 8005 → 改为 8006 --><Connector port="8080" protocol="HTTP/1.1" ... /> <!-- 默认 8080 → 改为 8888 -->
下面这个如果被注释了那就不用改了,没被注释就改一下 <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" ... /> <!-- 默认 8443 → 改为 8444 -->
(2)如需修改提示语可参考我的示例
区分两个tomcat,下面的 Tomcat -1 是指tomcat11版本
cd /opt/tomcat11/webapps/ROOT/
vim index.jsp
下面的 Tomcat -2 是指tomcat9版本
cd /opt/module/tomcat9/webapps/ROOT/
vim index.jsp
(3) 重启 Tomcat9
/opt/module/tomcat9/bin/shutdown.sh /opt/module/tomcat9/bin/startup.sh
4. 验证配置
(1) 检查 Tomcat9 环境
/opt/module/tomcat9/bin/startup.sh | grep -E "CATALINA_HOME|JRE_HOME"
输出应显示:
text
Using CATALINA_HOME: /opt/module/tomcat9 Using JRE_HOME: /opt/module/jdk11
(2) 检查 Tomcat11 环境
/opt/tomcat11/bin/startup.sh | grep -E "CATALINA_HOME|JRE_HOME"
输出应显示:
text
Using CATALINA_HOME: /opt/tomcat11 Using JRE_HOME: /opt/jdk17
5. 最终效果
实例 | 安装路径 | 使用的 JDK | 默认端口 | 启动命令 |
---|---|---|---|---|
Tomcat9 | /opt/module/tomcat9 | JDK11 (/opt/module/jdk11 ) | 8888 | /opt/module/tomcat9/bin/startup.sh |
Tomcat11 | /opt/tomcat11 | JDK17 (/opt/jdk17 ) | 8080 | /opt/tomcat11/bin/startup.sh |
关键点总结
-
隔离环境变量:通过
setenv.sh
为每个 Tomcat 实例单独配置,避免全局污染。 -
端口分离:修改
server.xml
防止端口冲突。 -
强制覆盖:在
setenv.sh
中使用unset
清除可能残留的全局变量。
按此配置后,两个 Tomcat 实例将 完全独立运行,互不干扰! 🚀
6.网页测试
可以看到我使用不同端口进入tomcat,出现的提示语不一样