如何在java中只加载一次属性?

时间:2013-12-18 11:24:43

标签: java properties

我已经在java中加载了属性文件。

public String getproperties(String property)
    InputStream inputStream = new ClassPathResource("test.properties").getInputStream();
            Properties testProperties = new Properties();
            testProperties.load(inputStream);
            inputStream.close();
            return testProperties.getProperty(propertyType);

}

它已成功加载。问题是每次加载属性文件而不是只加载一次。 怎么做到这一点?

4 个答案:

答案 0 :(得分:4)

将Properties对象存储为方法外的字段,最初为null,并且只在第一次调用时创建它:

private Properties testProperties = null;

public String getproperties(String property)
    if (testProperties == null) {
        InputStream inputStream = new ClassPathResource("test.properties").getInputStream();
        testProperties = new Properties();
        testProperties.load(inputStream);
        inputStream.close();
    }
    return testProperties.getProperty(propertyType);
}

答案 1 :(得分:3)

您可以通过执行以下操作轻松缓存属性:

class PropertyContainer {
    private static Properties properties;
    public static synchronized Properties getProperties() {
        if (properties != null) { return properties; }
        InputStream inputStream = new ClassPathResource("test.properties").getInputStream();
        properties = new Properties();
        properties.load(inputStream);
        inputStream.close();
    }
}

您的旧getproperties方法将是这样的:

return PropertyContainer.getProperties().getProperty(propertyType);

这当然假设您只需要一个属性文件。

答案 2 :(得分:-1)

只需创建类字段属性属性:) 并保存一次加载值。

答案 3 :(得分:-1)

我通常将它包装成私有方法,将对象存储到私有字段中:

private Properties _testProperties;
private Properties properties() {
  if (_testProperties == null) {
        InputStream inputStream = new ClassPathResource("test.properties").getInputStream();
       _testProperties = new Properties();
        inputStream.close();
       _testProperties.load(inputStream);
  }
  return _testProperties ;
}

public String getproperties(String property) {
   return properties().getProperty(property);
}