0

所以我有一个 Axis2 Web 服务(称为“ReleaseService”),它需要一个属性文件才能正常工作。我已将axis2部署到RHEL6上的Tomcat7中,并具有如下结构:

tomcat/webapps/axis2
+ axis2-web, META-INF, org
+ WEB-INF
+ + classes, conf, lib, modules
+ + services
+ + + ReleaseService
+ + + + com, lib, META-INF

考虑到 Java,我希望工作目录是tomcat/webapps/axis2/WEB-INF/services/ReleaseService,因为它包含一个 lib 文件夹和我的二进制文件的根文件夹。

所以我把我的属性文件放在那里并试图通过

File configFile = new File("releaseservice.properties");

这显然不起作用。我找了好几个小时,但找不到告诉我工作目录在哪里的帖子或文档片段。我找到了这个,但系统属性对我来说不是选项,因为我想保持部署简单。

发现工作目录是我的tomcat/bin文件夹,它是Tomcat Java进程的根目录。

额外问题:如何在我的 Web 服务中找到我的服务目录?Axis2 是否提供任何帮助程序来找出服务的文件夹?

4

2 回答 2

1

不建议对部署在 Java EE 容器中的应用程序代码中的当前工作目录进行假设。此外,您假设在部署 WAR 时,releaseservice.properties将作为文件存在,即容器会爆炸 WAR。这对 Tomcat 来说是正确的,但在其他服务器上可能不是这样。

Axis2 为每个部署的服务创建一个不同的类加载器。这意味着您可以通过将其作为资源查找来访问您的属性文件:

MyService.class.getResourceAsStream("/releaseservice.properties")

替换MyService为实现您的服务的实际类,或从WEB-INF/services/ReleaseService.

于 2012-09-21T08:42:29.457 回答
0

显然工作目录是tomcat/bin文件夹。尽管似乎在 tomcat 中运行了一个专用应用程序,但它都是同一个 Java 进程。

通过添加以下调试代码找到它:

File test = new File("abc.txt");
System.out.println(test.getAbsolutePath());

哪个返回/opt/tomcat/bin

于 2012-09-20T11:24:14.593 回答