我在Tomcat 7中配置webapp时遇到问题.在我的WAR文件中,有一个属性文件myApp/WEB-INF/classes/myProps.props,它包含特定于环境的属性.我试图覆盖服务器上的配置文件,以便将同一个WAR文件部署到多个环境中.

我听说有一种方法可以使用tomcat/conf/Catalina/myApp中的替换配置文件来实现这一点.这就是我很难弄明白的方法.

此外,myApp.war是在同一个Tomcat服务器上运行的许多服务器之一,它不作为本地主机运行.我希望能够为几个网络应用解决这个问题.

Server version: Apache Tomcat/7.0.23
Server built:   Nov 20 2011 07:36:25
Server number:  7.0.23.0
OS Name:        Linux

推荐答案

您的tomcat/conf/Catalina/<host>可以包含上下文描述符,让您可以配置很多东西,包括定义"环境条目",这些条目可以通过JNDI从Java访问.有很多方法可以使用它.就我个人而言,我设置了一个环境条目,它是指向属性文件的文件系统路径.我的应用程序是用来判断这个条目的,如果它不存在,就在类路径上查找这个文件.这样,在dev中,我们在类路径上就有dev属性,但是当我们构建和部署时,我们将其指向一个外部文件.

Tomcat网站上有configuring a context个很好的文档.有关如何创建文件以及将其放置在何处的详细信息,请参见Defining a Context section.

例如,如果您的主机名为myHost,而您的应用程序是webapps目录中名为myApp.war的war文件,那么您可以使用以下内容创建tomcat/conf/Catalina/myHost/myApp.xml:

<Context>
    <Environment name="configurationPath" value="/home/tomcat/myApp.properties" type="java.lang.String"/>
</Context>

然后从代码中,对java:comp/env/configurationPath(这里95%的确定性)进行JNDI查找,以获得该字符串值.

Linux相关问答推荐

Linux/gcc中的文件创建时间系统调用

如何正确Forking 并完成进程以避免 EAGAIN 错误

Postfix 连接到 domain.com[74.208.61.85]:587: 连接被 dovecot、opendkim 和 SSL 拒绝

在 Rust 中重命名主线程

为什么控制台不接受反向换行?

Google Cloud Ops Agent Mongo 集成错误 - AuthenticationFailed:SCRAM 身份验证失败,storedKey 不匹配

什么命令用于在linux中创建或修改具有指定文件大小的多个文件

为什么要命令; ls -l file_doesnot_exists > /dev/null 2>&1 正在工作; ls -l 2>&1 file_doesnot_exists > /dev/null 不是

Linux 系统调用文档

ENQCMD 指令的好处和微操作是什么?

如何在 Linux 命令行上解析 CSV 文件?

Git为每次推送输入长密码

使用 Scp 时防止覆盖文件

nvm:无法卸载当前活动的 node 版本

如何从命令行打开 Ubuntu Linux 上的 AVD 管理器?

Ant 找不到 javac,在 Ubuntu 上不会设置 JAVA_HOME

如何通过命令提示符判断 Linux 中的 BIOS 版本或名称?

conda 命令会提示错误:Bad Interpreter: No such file or directory

如何通过进程名获取PID?

如何在 linux 中使用 CMake 和 Kdevelop 编译 GLUT + OpenGL 项目?