同时部署两个不同版本的tomcat要如何配置环境变量

发布于:2025-07-16 ⋅ 阅读:(15) ⋅ 点赞:(0)

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

为什么可以完全移除?

  1. setenv.sh 已接管环境变量

    • 每个 Tomcat 的 bin/setenv.sh 已独立配置 JAVA_HOME 和 CATALINA_HOME,优先级更高。

    • 全局变量反而可能导致冲突(如你的最初问题)。

  2. JDK 版本通过 setenv.sh 绑定到 Tomcat

    • Tomcat9 → 强制使用 JDK11

    • Tomcat11 → 强制使用 JDK17

    • 无需依赖全局 JAVA_HOME

  3. 保持系统干净

    • 避免其他用户或服务误用全局变量。

(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

关键点总结

  1. 隔离环境变量:通过 setenv.sh 为每个 Tomcat 实例单独配置,避免全局污染。

  2. 端口分离:修改 server.xml 防止端口冲突。

  3. 强制覆盖:在 setenv.sh 中使用 unset 清除可能残留的全局变量。

按此配置后,两个 Tomcat 实例将 完全独立运行,互不干扰! 🚀

6.网页测试

可以看到我使用不同端口进入tomcat,出现的提示语不一样

 


网站公告

今日签到

点亮在社区的每一天
去签到