我们希望按照以下方式配置 Tomcat(其中X
-SL->代表指向路径的Y
符号链接):X
Y
CATALINA_HOME/webapps
-SL->/var/data/nas/deploymentconfiguration_a
/var/data/nas/deploymentconfiguration_a/myapp.war
-SL->/var/data/nas/wars/app1.war
这个想法是能够通过在特定 Tomcat 实例中拥有一系列指向 WAR 的符号链接来配置哪些应用程序部署在部署配置文件夹,并有另一个从 CATALINA_HOME 到特定目录的名为 webapps 的符号链接部署配置文件夹。
许多 Tomcat 实例会指向同一个部署配置文件夹。
我希望这很清楚:S
整个/var/data/nas
树将是只读的。
在试验中,我们遇到的主要问题是,Tomcat 显然试图将战争引爆到部署配置文件夹(它认为是appBase
),它是只读的。
有没有办法让 Tomcat 将其 war 解压到某种本地工作文件夹中(根据对源代码的快速扫描,我认为没有),或者唯一的方法是首先阻止 Tomcat 爆炸 war 文件?
我们正在使用 Tomcat 6。
编辑
我们将针对同一配置运行多个 Tomcat 实例。因此,可能会有 10 个 Tomcat 针对 运行deploymentconfiguration_a
,10 个针对 运行deploymentconfiguration_b
,但每个 Tomcat 中的实际 WAR 文件之间可能存在一些共同点部署配置(即deploymentconfiguration_a
可能有 WAR 1、2 和 5,同时deploymentconfiguration_b
可能有 WAR 1、5 和 7)。
之所以采用 RO,是为了避免意外修改特定配置,也是为了避免一个 Tomcat 实例干扰另一个实例。
答案1
根据您提供的信息(感谢您与我反复讨论)。我认为您可以选择以下选项:
- 在 server.xml 文件中的 Host 指令中插入 unpackWars="false",然后直接从 war 文件运行应用程序。
- 手动将 nas 上的 war 扩展到正确的部署目录中。
我给出这些建议只是基于这样一个事实:这些部署所在的文件系统对于所涉及的 Tomcat 来说是只读的。
我个人会选择选项 1。除非您出于某种原因需要查看单个文件,否则没有必要在文件展开的情况下运行。(当然,除非您有一个需要引用 war 中的文件的糟糕应用程序……)
我可能还会将 autoDeploy 设置为“off”。除非您认为您会当场更改这些 Tomcat 组下的 war 文件?