tomcat启动依赖java_home和可选catalina_home,consul仅依赖path中包含其二进制路径;二者环境变量不可混用,服务注册由spring cloud consul配置驱动,而非环境变量。

Tomcat 和 Consul 是两类不同职责的组件,**不能共用环境变量,也不应混配**。把 TOMCAT_HOME 和 CONSUL_HOME 都塞进同一个 PATH 或强行复用变量名,只会导致启动失败、命令冲突或健康检查误判。
Tomcat 的环境变量只影响自身启动和脚本执行
Tomcat 启动依赖 JAVA_HOME 和可选的 CATALINA_HOME(或 TOMCAT_HOME),用于定位 Java 运行时和 Tomcat 核心目录。它不读取、也不关心 CONSUL_HOME 或任何 Consul 相关变量。
-
CATALINA_HOME必须指向解压后的 Tomcat 根目录(如/opt/tomcat),路径中不能含空格或中文 - 若同时运行多个 Tomcat 实例,每个实例应使用独立的
CATALINA_BASE,指向各自配置/日志/临时文件目录 - 修改
bin/startup.sh或bin/catalina.sh前,先确认JAVA_HOME已正确导出,否则会报Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
Consul 的环境变量仅用于命令行调用
Consul 是单二进制工具,consul 命令能否在任意路径下执行,只取决于 PATH 是否包含其所在目录。它不需要 TOMCAT_HOME,也不从 Tomcat 的配置里读取服务地址。
- 推荐将
consul可执行文件放在统一目录(如/usr/local/bin或D:\tools\consul),然后只把该目录加进PATH,无需额外设CONSUL_HOME - 如果非要设
CONSUL_HOME(例如某些脚本硬编码引用),它的值应是 Consul 二进制所在父目录,且必须确保$CONSUL_HOME/consul可执行 - 执行
consul agent -dev时若报command not found,优先检查PATH,而不是去改 Tomcat 的变量
服务注册不是靠环境变量“连通”的,而是靠 Spring Cloud Consul 配置
当 Tomcat 上跑的 Spring Boot 应用要注册到 Consul,起作用的是 application.yml 或 application.properties 里的配置项,跟环境变量无关。
- 必须显式配置
spring.cloud.consul.host和spring.cloud.consul.port,默认值是localhost:8500,但生产环境往往要改成真实 Consul Server 地址 - 若 Consul 启动时用了非默认端口(比如
-http-port=8501),则应用配置里也必须同步改spring.cloud.consul.port=8501,否则注册请求直接超时 - 健康检查路径(
spring.cloud.consul.discovery.health-check-path)需与 Spring Boot Actuator 的management.endpoints.web.base-path和实际暴露的 endpoint 一致,常见错误是写成/actuator/health但实际暴露的是/health
容易被忽略的跨进程通信细节
Tomcat 进程和 Consul Agent 是完全独立的进程,它们之间没有共享内存或隐式通道。所有交互都走 HTTP(默认 8500 端口)或 DNS(8600 端口)。这意味着:
- Consul Agent 必须已启动并监听对应端口,否则 Spring Boot 应用启动时会卡在注册阶段,日志出现
Connect to localhost:8500 timed out - 若 Tomcat 部署在 Docker 容器中,而 Consul 在宿主机,应用配置里的
host不能写localhost,得换成宿主机 IP(如172.17.0.1)或通过host.docker.internal(Docker Desktop)访问 - Consul 的 ACL 或 TLS 配置一旦开启,Spring Cloud Consul 客户端就必须同步配置 token 或证书,否则注册会被拒绝,错误信息通常是
Unexpected response code: 403











