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

tomcat9tomcat11完全独立使用各自的 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_HOMECATALINA_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,出现的提示语不一样

相关推荐
kkkkk02110619 小时前
微服务学习笔记(黑马商城)
java·spring boot·spring·spring cloud·sentinel·mybatis·java-rabbitmq
2503_9301239319 小时前
Kubernetes (六)调度策略详解:从节点匹配到Pod调度全流程
java·开发语言
橘颂TA19 小时前
【C/C++】进程
服务器
YBN娜19 小时前
设计模式-创建型设计模式
java·开发语言·设计模式
桦说编程19 小时前
CompletableFuture API 过于复杂?选取7个最常用的方法,解决95%的问题
java·后端·函数式编程
Lenyiin19 小时前
《 Linux 点滴漫谈: 三 》掌控终端:让 Shell 成为你的系统魔杖
linux·运维·服务器·lenyiin
数智顾问19 小时前
Flink ProcessFunction 与低层级 Join 实战手册:多流广告计费精确去重
java·spring boot·spring
一头生产的驴20 小时前
java整合itext pdf实现固定模版pdf导出
java·python·pdf
魔都吴所谓20 小时前
【python】快速实现pdf批量去除指定位置水印
java·python·pdf
Camel卡蒙20 小时前
数据结构——字典树Trie(介绍、Java实现)
java·数据结构