Tomcat中CATALINA_HOME和CATALINA_BASE的区别

本文介绍了CATALINA_HOME和CATALINA_BASE在Tomcat中的区别和作用。CATALINA_HOME代表Tomcat安装路径,而CATALINA_BASE用于配置特定Tomcat实例。设置不同的CATALINA_BASE可以方便管理多个Tomcat实例,避免重复的静态资源,且允许共享设置。使用CATALINA_BASE需要创建包括bin、lib、logs、webapps、work和temp等目录,并注意配置文件和应用的查找顺序。

本说明针对Tomcat7。此处记录以作备查。

1CATALINA_HOMECATALINA_BASE的定义

官方说明

  • CATALINA_HOME:Represents the root of your Tomcat installation, for example /home/tomcat/apache-tomcat-9.0.10 or C:\Program Files\apache-tomcat-9.0.10.
  • CATALINA_BASE:Represents the root of a runtime configuration of a specific Tomcat instance. If you want to have multiple Tomcat instances on one machine, use the CATALINA_BASE property.

If you set the properties to different locations, the CATALINA_HOME location contains static sources, such as .jar files, or binary files. The CATALINA_BASE location contains configuration files, log files, deployed applications, and other runtime requirements.

由此可知:

CATALINA_HOME:代表Tomcat安装的根路径。

CATALINA_BASE:代表特定的Tomcat实例在运行时配置的根路径。如果希望在一台计算机上有多个Tomcat实例,请使用CATALINA_BASE属性。

更进一步,如果你设置了CATALINA_HOME和CATALINA_BASE两个属性,并且两个属性代表的路径不同,那么CATALINA_HOME路径包含的是静态资源,例如.jar文件,或者二进制文件;   CATALINA_BASE路径包含的是配置文件、log日志文件、部署的应用程序和其它运行时所需的资源。

 

2、为什么使用CATALINA_BASE

官方说明

By default, CATALINA_HOME and CATALINA_BASE point to the same directory. Set CATALINA_BASE manually when you require running multiple Tomcat instances on one machine. Doing so provides the following benefits:

  • Easier management of upgrading to a newer version of Tomcat. Because all instances with single CATALINA_HOME location share one set of .jar files and binary files, you can easily upgrade the files to newer version and have the change propagated to all Tomcat instances using the same CATALIA_HOME directory.
  • Avoiding duplication of the same static .jar files.
  • The possibility to share certain settings, for example the setenv shell or bat script file (depending on your operating system).

 

由此可知,默认情况下,CATALINA_HOME和CATALINA_BASE指向相同的目录。当需要在一台机器上运行多个Tomcat实例时,需要手动设置CATALINA_BASE。这样做的好处是:

(1)、方便管理Tomcat升级到新版本。所有实例都使用同一个CATALINA_HOME路径,只需要更新该路径下的静态资源,例如.jar文件,那么所有使用CATALINA_HOME路径的实例都同时会升级。

(2)、避免相同静态.jar文件的重复,只需要相同的一份就可以了。

(3)、使某些设置共享变为可能。

3CATALINA_BASE的目录

官方说明

Before you start using CATALINA_BASE, first consider and create the directory tree used by CATALINA_BASE. Note that if you do not create all the recommended directories, Tomcat creates the directories automatically. If it fails to create the necessary directory, for example due to permission issues, Tomcat will either fail to start, or may not function correctly.

Consider the following list of directories:

  • The bin directory with the setenv.sh, setenv.bat, and tomcat-juli.jar files.

Recommended: No.

Order of lookup: CATALINA_BASE is checked first; fallback is provided to CATALINA_HOME.

  • The lib directory with further resources to be added on classpath.

Recommended: Yes, if your application depends on external libraries.

Order of lookup: CATALINA_BASE is checked first; CATALINA_HOME is loaded second.

  • The logs directory for instance-specific log files.

Recommended: Yes.

  • The webapps directory for automatically loaded web applications.

Recommended: Yes, if you want to deploy applications.

Order of lookup: CATALINA_BASE only.

  • The work directory that contains temporary working directories for the deployed web applications.

Recommended: Yes.

  • The temp directory used by the JVM for temporary files.

Recommended: Yes.

 

需要注意的几点:

(1)、在开始使用CATALINA_BASE属性前,首先在CATALINA_BASE指定的路径下至少要创建两个文件夹,conftemp,其中conf目录中至少要包含server.xml和web.xml文件,推荐将CATALINA_HOME\conf目录的文件全部拷贝。并且要特别注意,Tomcat服务器只在CATALINA_BASE路径conf中查找配置文件,并不会回退到CATALINA_HOME路径下查找配置文件。

(2)、如果定义了lib目录,运行时查找的次序是,首先在CATALINA_BASE路径下查找,然后到CATALINA_HOME路径下查找。

(3)、如果部署应用程序,必须创建webapps目录。并且要特别注意的是Tomcat服务器查找应用的顺序是只在CATALINA_BASE路径下查找,并不会到CATALINA_HOME路径下查找。

4、如何使用CATALINA_BASE

官方说明

The CATALINA_BASE property is an environment variable. You can set it before you execute the Tomcat start script, for example:

  • On Unix: CATALINA_BASE=/tmp/tomcat_base1 bin/catalina.sh start
  • On Windows: CATALINA_BASE=C:\tomcat_base1 bin/catalina.bat start

举例:在控制台命令窗口设置一个临时CATALINA_BASE变量进行测试

D:\Program Files\tomcat\tomcat-6.0_zhxy\bin>set CATALINA_BASE=D:\Program Files\tomcat

D:\Program Files\tomcat\tomcat-6.0_zhxy\bin>catalina.bat run

### Tomcat 配置 CATALINA_BASE 方法及作用 #### 1. 配置方法 在配置 `CATALINA_BASE` 环境变量时,可以通过以下方式实现: - **通过命令行传递环境变量** 在启动 Tomcat 实例时,在运行参数中指定 `CATALINA_BASE` 变量。例如,在 Windows 或 Linux 中可以分别执行以下命令: ```bash export CATALINA_BASE=/path/to/tomcat-instance ./startup.sh ``` 对于调试模式下的 Java 虚拟机 (JVM),可以在 IDE(如 IntelliJ IDEA)中的 Run/Debug Configuration 设置中添加环境变量[^1]。 - **修改启动脚本** 编辑 Tomcat 的启动脚本 (`bin/catalina.sh` 或 `bin/catalina.bat`),在其顶部显式定义 `CATALINA_BASE` 的路径。例如: ```bash # Unix/Linux CATALINA_BASE="/path/to/tomcat-instance" export CATALINA_BASE ``` - **多实例场景下的自动化工具** 如果需要管理多个 Tomcat 实例,可以编写脚本来动态生成不同的 `CATALINA_BASE` 工作目录,并将其绑定到对应的实例上。这种方式适合大规模部署场景[^4]。 --- #### 2. 作用解析 `CATALINA_BASE` `CATALINA_HOME` 是两个重要的环境变量,它们的作用分别是: - **`CATALINA_HOME`**: 表示 Tomcat 安装的核心目录,包含了可共享的二进制文件、库文件以及核心组件(如 `lib`, `bin`)。它是所有 Tomcat 实例共用的部分。 - **`CATALINA_BASE`**: 表示 Tomcat 运行的工作目录,每个实例都有独立的 `conf`, `logs`, `temp`, `webapps`, `work` 子目录。这使得不同实例能够隔离运行而不互相干扰[^5]。 具体来说,`CATALINA_BASE` 的主要功能包括以下几个方面: - **支持多实例运行** 当同一台服务器需要运行多个 Tomcat 实例时,通过设置不同的 `CATALINA_BASE` 值,可以让各个实例拥有独立的配置文件日志记录,从而避免冲突[^2]。 - **资源隔离** 不同的 `CATALINA_BASE` 下的应用程序不会相互影响,因为它们各自维护着单独的上下文环境临时数据存储区域[^3]。 - **节省磁盘空间** 使用统一的 `CATALINA_HOME` 目录来存放公共部分,减少了重复安装带来的冗余占用。 --- #### 示例代码 以下是基于 IntelliJ IDEA 的简单配置示例: ```python # 在 Run/Debug Configurations 中添加 Environment Variables export CATALINA_BASE=D:\\devtools\\apache-tomcat-instances\\instance1 ``` 对于 Shell 脚本自动化的例子: ```bash #!/bin/bash INSTANCE_DIR=$1 if [ ! -d "$INSTANCE_DIR" ]; then echo "Error: Instance directory does not exist." exit 1 fi CATALINA_HOME=/opt/apache-tomcat-9.0.68 CATALINA_BASE=$INSTANCE_DIR export CATALINA_HOME CATALINA_BASE $CATALINA_HOME/bin/startup.sh ``` --- #### 注意事项 - 确保 `CATALINA_BASE` 所指向的目录结构完整,至少包含 `conf`, `logs`, `temp`, `webapps`, `work` 等子目录。 - 同一主机上的多个 Tomcat 实例应分配唯一的端口号(如 HTTP, AJP),以防止端口冲突。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值