所以我有一个Axis2 Web服务(称为“ReleaseService”),它需要一个属性文件才能正常工作。我已经在RHEL6上将axis2部署到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");
显然不起作用。我已经找了好几个小时但找不到帖子或文档片段,它告诉我工作目录在哪里。我发现this,但系统属性对我来说是没有选择的,因为我希望简化部署。
发现,工作目录是我的tomcat/bin
文件夹,它是Tomcat Java进程的根目录。
加分问题:如何在我的网络服务中找到我的服务目录? Axis2是否提供任何帮助以找出服务的文件夹?
答案 0 :(得分:1)
不建议对部署在Java EE容器中的应用程序代码中的当前工作目录进行假设。此外,您假设在部署WAR时,releaseservice.properties
将作为文件存在,即容器爆炸WAR。这对Tomcat来说是正确的,但在其他服务器上可能不是这样。
Axis2为每个已部署的服务创建不同的类加载器。这意味着您可以通过查找资源来访问您的属性文件:
MyService.class.getResourceAsStream("/releaseservice.properties")
将MyService
替换为实现您的服务的实际类,或从WEB-INF/services/ReleaseService
加载的任何其他类。
答案 1 :(得分:0)
显然工作目录是tomcat/bin
文件夹。即使看起来在tomcat中运行了一个专用的应用程序,它也是完全相同的Java进程。
通过添加以下调试代码找到它:
File test = new File("abc.txt");
System.out.println(test.getAbsolutePath());
返回了/opt/tomcat/bin