【问题标题】:prunsrv service with external properties file具有外部属性文件的 prunsrv 服务
【发布时间】:2017-10-04 15:41:19
【问题描述】:

我有一个使用 NetBeans 创建的 java .jar 文件。我正在使用 apaches procrun (prunsrv.exe) 将该 .jar 安装为 Windows 服务。我修改了代码以从 config.properties 文件中获取属性。 我将 config.properties 文件添加到我的 .jar 文件所在的同一文件夹中。 我的代码如下:

Properties props = new Properties();
InputStream inputStream = MyService.class.getClassLoader().getResourceAsStream("config.properties");
props.load(inputStream);

在我的代码的最后一行,当我尝试启动我的服务时,我得到了一个 NPE。我认为这是因为找不到该文件。 我将 manifest.mf 修改如下:

Class-Path: .

我还尝试将 config.properties 复制到“lib”文件夹(我的 .jar 文件所在的子文件夹)。结果相同。

我修改了安装服务的批处理文件中的“set PR_CLASSPATH”行如下:

set PR_CLASSPATH=MyService.jar;.

仍然是相同的 NPE。

安装服务后,如何让我的代码识别我的 config.properties 文件?

谢谢, 雷蒙德

【问题讨论】:

    标签: java procrun


    【解决方案1】:

    这是我在这些情况下用来加载资源的方法,并且似乎大部分时间都可以工作:

    public static InputStream getResourceAsStream(String path) {
        return Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
    }
    

    您能否检查一下,这对您的情况是否有帮助?

    解决这个问题的另一种策略是我评论中描述的策略:

    "将配置文件复制到特定的绝对文件夹路径(即 c:\test)并更改类路径以指向该文件夹(设置 PR_CLASSPATH=MyService.jar;.;c:\test) em>"

    【讨论】:

    • 同样的问题。我将“config.properties”传递给该方法,InputStream 仍然为空。
    • 您能否将配置文件的副本复制到特定的绝对文件夹路径(即 c:\test)并更改类路径以指向该文件夹(设置 PR_CLASSPATH=MyService.jar;.;c: \测试)。然后重试?
    • 做到了。在我尝试过并且成功之后,我只是在我的根目录下创建了一个“资源”文件夹并将其添加到我的 CLASSPATH 中。我相信我的问题是 manifest.mf 与我的 install.bat 中的“set PR_CLASSPATH”一起使用。我删除了 manifest.mf 中的类路径条目,并修改了 PR_CLASSPATH 以包含我需要的所有内容。
    • 所以你的问题现在似乎已经解决了 :) 我已经更新了问题以包含有帮助的评论,这样你就可以将问题标记为已解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多