同时部署两个不同版本的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,出现的提示语不一样

相关推荐
麦兜*几秒前
Spring Boot 集成Reactive Web 性能优化全栈技术方案,包含底层原理、压测方法论、参数调优
java·前端·spring boot·spring·spring cloud·性能优化·maven
天上掉下来个程小白3 分钟前
MybatisPlus-06.核心功能-自定义SQL
java·spring boot·后端·sql·微服务·mybatisplus
知了一笑10 分钟前
独立开发第二周:构建、执行、规划
java·前端·后端
今天背单词了吗9801 小时前
算法学习笔记:17.蒙特卡洛算法 ——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·笔记·考研·算法·蒙特卡洛算法
Dcs1 小时前
从 C 到 Rust:一位开发者的 `tmux` 全面移植之旅
java
颖川初尘1 小时前
端口到底是个什么鬼?回答我!
服务器·网络·tcp/ip·node.js
Maybyy1 小时前
力扣242.有效的字母异位词
java·javascript·leetcode
stark张宇1 小时前
Linux 文件创建、删除、移动、复制基础知识整理
linux·服务器·centos
将心ONE2 小时前
使用 lstrip() 和 rstrip() 方法
运维·服务器
小小寂寞的城2 小时前
JAVA观察者模式demo【设计模式系列】
java·观察者模式·设计模式