有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将propertyfile与GlassFish一起使用

我正在创建一个web服务,它在GlassFish中运行,我希望有一些自定义属性。为此,我使用了Properties类。我使用的代码是:

Properties p=new Properties();
File f=new File(System.getProperty("user.dir"), "settings.properties");
p.load(new FileInputStream(f));  

但是如何在我的配置目录中获取settings.properties-文件呢

我不确定我的类路径,因为它是由NetBeans和GlassFish管理的。我假设我的.war-文件在部署时被添加到类路径中

我已经添加了我自己的解决方案,但如果有人能提出更好的解决方案,那将是非常受欢迎的


共 (6) 个答案

  1. # 1 楼答案

    我尝试了很多,但我用以下方法解决了这个问题:

            // ServletContext ctx
            InputStream stream = ctx.getResourceAsStream("version.properties");
            p = new Properties();
            p.load(stream);
    

    我必须通过调用getServletContext()getServletContext()从jsp页面传递ServletContext。不太理想,但这是我唯一能让它工作的方法

    不过,如果有人能想出另一个解决方案,那就太好了,可以在ServletContext中使用

  2. # 2 楼答案

    有关如何从类路径读取属性文件的信息,请参见here

    URL url =  ClassLoader.getSystemResource("test.properties");
    Properties p = new Properties();
    p.load(new FileInputStream(new File(url.getFile())));
    

    然后只需要将配置目录添加到类路径中

    如果您在使用上述代码时遇到问题,请尝试ServletContext.getResource

  3. # 3 楼答案

    有效的解决方案实际上非常简单:

    URL url =  this.getClass().getResource("/package/name/file.properties");
    p = new Properties();
    p.load(new FileInputStream(new File(url.getFile())));
    

    为什么没有人带着这个来

  4. # 5 楼答案

    +1用于将其放在类路径中

    如果您正在使用Spring(我强烈建议您这样做,如果您还没有使用Spring,原因很多),那么您可以加载如下属性文件:

    database.username=scott
    database.password=tiger
    

    并在应用程序上下文中放置引用,如:

    <property name="username" value="${database.username}"/>
    

    (假设您已配置属性配置器),如果无法加载文件或属性不存在,则会导致错误。应用程序将无法启动。这其实是一件好事。它能让你很快发现问题,而且比默默失败要好得多,因为默默失败有时会带来灾难性的后果

  5. # 6 楼答案

    将属性文件放在中<;glassfish安装目录>/玻璃鱼/域/<;域名>/lib/classes目录,可以通过ResourceBundle类从应用程序中访问它们。例如,添加名为设置的属性文件。属性访问此目录,然后访问文件中的值,如下所示:

    ResourceBundle.getBundle("settings").getString("my-property-key");