每个webapp设置Tomcat 7工作目录?

时间:2016-03-29 13:23:46

标签: java tomcat

所以我确定Tomcat 7的工作目录默认为$ CATALINA_BASE / bin

我获得了一个jar(在已部署的webapp中运行),该代码运行在不读取外部属性文件的代码上,这是Tomcat 7的推荐方法。该代码最初用于Weblogic,并且仍然在那里使用。< / p>

它以这种方式打开文件:

FileInputStream fis = new FileInputStream("AXFLogger.properties");

我知道Tomcat推荐的方式是:

InputStream is = getClass().getClassLoader().getResourceAsStream("AXFLogger.properties");

无论如何问题不在于代码应该是什么,问题是改变代码可能真的有问题,因为它已经老了,我可能需要离岸团队为我重写它。

我熟悉workDir Tomcat属性,但这似乎是一个全局Tomcat设置,这是一个问题。我希望它仅适用于单个webapp。显然,将webapp的属性文件存储在Tomcat的bin目录中是一个坏主意。

所以我想知道是否有人对此解决方法有任何想法?我需要这个来帮助降低更改代码可能不可行的风险。感谢

1 个答案:

答案 0 :(得分:1)

无法更改每个Web应用程序的working directory。该进程有一个“工作目录”,根据您使用的服务器软件(Tomcat本身并不关心,但Weblogic等其他应用程序服务器可能),可能会出现问题,这可能会有问题。

在Tomcat下运行时,每个应用程序都有自己的“工作”目录:如果您获取上下文属性javax.servlet.context.tempdir的值,您将找到指向特定于上下文的java.io.File实例工作目录。

不幸的是,只需打开这样的文件:

FileInputStream in = new FileInputStream("myfile");

只有上述两个概念中的第一个正在运行:文件将从流程的当前工作目录加载。

您可以在启动Tomcat时尝试设置工作目录,但它只适用于单个应用程序(如果您有多个应用程序,如上所述)。这是你如何做到的:

$ cd path/to/web/application
$ $CATALINA_HOME/bin/startup.sh

这会将工作目录设置为path/to/web/application。 Tomcat无需更改该工作目录。

如果你有多个应用程序都以这种方式运行,那么解决这个问题的一种方法就是简单地启动多个Tomcat进程 - 每个Web应用程序一个 - 生活在他们自己的工作目录中。当然,你需要一个反向代理服务器来根据URL模式(或其他)将客户端请求代理到正确的Tomcat后端,但是你应该有一个反向代理服务器来保证稳定性和容错性。 ,无论如何。

如果您有权访问源代码,实际上最好按照您在原始帖子中的建议进行修改(尽管使用前导/只是为了确切)。更好的是,可能使用servlet或上下文<init-param>来指定文件的位置,以防你想在其他地方移动它。为此目的修改源代码不需要与一些离岸公司长期合作......只需编辑文件并在30秒内修复它。